Contoh dalam artikel ini menerangkan penggunaan fungsi JS untuk mengakses SWF. Kongsikan dengan semua orang untuk rujukan anda. Analisis khusus adalah seperti berikut:
Terdapat banyak contoh Flash dan JS yang memanggil satu sama lain. Sudah tentu, ralat panggilan bukan ralat antara Flash dan JS Hari ini kami akan menyelesaikan sepenuhnya masalah ketidakserasian antara IE, FF dan Chrome .
Kami tahu bahawa dalam Flash, jika anda mengakses fungsi JS luaran, anda hanya perlu
Jika anda mahu JS mengakses fungsi dalam Flash, anda perlu mendaftarkan fungsi panggil balik dengan addCallBack dan biarkan JS memanggilnya (contoh AS2)
import flash.external.*; var methodName:String = "SetImgPath"; //JS需要调用的函数名字 var instance:Object = null; var method:Function = extractstr; //Flash中实际的函数名字,参数忽略,但是你调用的时候要记得有参数的要加上 var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method); trace(wasSuccessful+"-callback")
Kita boleh trace kalau betul masa ni bermakna pendaftaran berjaya
OK, cuba di web di bawah:
<div style="margin-left:50px; margin-bottom:50px"><input type="text" id="mytxt" border="1" value="这是测试框,调用页面JS演示" style="width:200px"/></div> <div id="flashContent"> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="515" height="320" id="123" align="middle"> <param name="movie" value="123.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#000000" /> <param name="play" value="true" /> <param name="loop" value="true" /> <param name="wmode" value="transparent" /> <param name="scale" value="showall" /> <param name="menu" value="true" /> <param name="devicefont" value="false" /> <param name="salign" value="" /> <param name="allowScriptAccess" value="sameDomain" /> <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="123.swf" width="515" height="320"><!--下面针对非IE内核浏览器--> <param name="movie" value="123.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#000000" /> <param name="play" value="true" /> <param name="loop" value="true" /> <param name="wmode" value="transparent" /> <param name="scale" value="showall" /> <param name="menu" value="true" /> <param name="devicefont" value="false" /> <param name="salign" value="" /> <param name="allowScriptAccess" value="sameDomain" /> <!--<![endif]--> <a href="upload/2011/1/201101281000491420.gif" alt="获得 Adobe Flash Player" /> </a> <!--[if !IE]>--> </object> <!--<![endif]--> </object> </div>
OK, kami menambah butang pada Web untuk memanggil panggilan kilat ini:
Uji:
Semuanya berfungsi dengan baik untuk IE6, 7, 8, 9
FF: Gagal
Chrome: Gagal
Punca kegagalan: SetImgPath bukan fungsi /tidak ditakrifkan)
Ini sangat pelik, kita boleh menggunakan amaran untuk mengeluarkan
Hasil output bukan Null, yang bermaksud Flash kami telah ditemui, tetapi mengapa FF dan Chrome tidak dapat sentiasa mencari fungsi itu?
Selepas menyemak imbas pelbagai forum, konsensus ialah addCallback mesti dimuatkan dengan flash sebelum pendaftaran boleh berjaya, mari tambah fungsi settimeout untuk menentukan sama ada pemuatan itu berjaya:
function flashcall(str){ try{ thisMovie("123").SetImgPath(str);//注意,123是上面的ID,而SetImgPath是我们Flash中的注册的回调函数 }cache(e){ settimeout("flashcall(str)",100 ); } }
Nah, kami menggunakan settimeout dan memanggilnya setiap 100 milisaat Jika ada pengecualian, kami akan terus memanggil sehingga berjaya!
Malangnya, ia tidak pernah berjaya dan program memasuki gelung yang tidak terhingga!
Selepas berunding dengan pelbagai maklumat, akhirnya saya jumpa sebabnya:
Pelayar dalam FF hanya mengenali teg benam, jadi jika anda menggunakan getElementById untuk mendapatkan denyar, anda perlu menandai benam dengan ID, jadi anda perlu menandai ID pada objek 🎜>
Adakah anda faham? Ternyata dalam FF dan Chrome, Flash mesti menggunakan benam untuk mengenal pasti IDnya, dan teg Objek tidak dapat mengenal pasti ID yang saya gunakan dijana secara automatik oleh Flash, dan semuanya adalah teg Objek , yang berbahaya Selepas menyahpepijat selama satu petang, saya menyedari bahawa masalahnya terletak di sini.Sekarang anda tahu sebabnya, ia akan menjadi lebih mudah untuk menanganinya
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="515" height="320" id="123" title="123" align="middle"> <param name="allowScriptAccess" value="always" /> <param name="movie" value="123.swf"> <param name="quality" value="high"> <param name="wmode" value="transparent" /> <embed src="123.swf" name="123" quality="high" allowScriptAccess="always" swLiveConnect="true" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="515" height="320"></embed> </object>
Saya harap artikel ini akan membantu reka bentuk pengaturcaraan JavaScript semua orang.