根据 Adobe 的说法,嵌入 Flash 对象的“现代”更新方式:
<object id="theFlash" name="theFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
width="400" height="225" align="middle">
<param name="movie" value="theflashfile.swf" />
<param name="allowScriptAccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash"
data="getStreamFrame.swf" width="400" height="225">
<param name="allowScriptAccess" value="always" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflash">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
当尝试从 Javascript 调用 SWF 中的 AS3 函数时:
var flashObj = document.getElementById('theFlash');
flashObj.someASFunction();
(以及在 AS 端:)
import flash.external.*;
function someASFunction() {
//show some text
}
ExternalInterface.addCallback("someASFunction", someASFunction);
这在 Firefox 和 Chrome 中不有效。 闪光灯工作并加载。 flashObj 确实获得了对该对象的引用,但 someASFunction 未定义且未被调用。
如果我用嵌入标签替换对象标签:
<embed id="theFlash" name="theFlash" height="225" width="400" align="middle"
type="application/x-shockwave-flash" allowscriptaccess="always"
src="theflashfile.swf" />
然后它在 Firefox 和 Chrome 上工作(调用 AS 函数并正常工作)-(但它在 IE 中不起作用)。
为什么它不适用于对象标签?
使用嵌入标签而不是对象标签有多“安全”?不是过时了吗?
请注意,这绝对不是时间问题 - 如果我从 JS 从 onclick 函数调用 AS 函数 - 那么结果是相同的。
最佳答案
当使用推荐的 Adobe 方法时,我也无法在 FF 和 Chrome 中定位 flashmovie。我最终使用了以下代码,ExternalInterface 在所有浏览器中都运行良好
<div id="flashContent">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="619" height="99" id="myFlashMovie" align="middle">
<param name="movie" value="myFlashMovie.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#f2f2f2" />
<param name="allowScriptAccess" value="sameDomain" />
<!--[if !IE]>-->
<embed src="myFlashMovie.swf" quality="high" bgcolor="#f2f2f2"
width="619" height="99" name="myFlashMovie" align="middle"
play="true" loop="true" quality="high" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
<!--<![endif]-->
</object>
为了定位 flash 电影,我使用了这个 java 脚本
function sendDataToFlash(data) {
getFlashMovie("myFlashMovie").myCallbackInFlash(data);
}
function getFlashMovie(movieName) {
var isIE = navigator.appName.indexOf("Microsoft") != -1;
if(isIE) return window[movieName];
else return document[movieName];
}
关于javascript - flash:ExternalInterface 适用于嵌入标签,但不适用于对象标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474388/