javascript - flash:ExternalInterface 适用于嵌入标签,但不适用于对象标签

标签 javascript flash actionscript-3 externalinterface

根据 Adob​​e 的说法,嵌入 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 函数 - 那么结果是相同的。

最佳答案

当使用推荐的 Adob​​e 方法时,我也无法在 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/

相关文章:

javascript - 在 JavaScript 背景下学习 ActionScript

javascript - 如何在 window.open 中使用 noreferrer 功能并获取对子窗口的非空引用?

javascript - 如果字段值为空并且图像 src 也在 HTML 中使用 Javascript,我想隐藏字段

flash - 我可以根据计时器控制补间动画速度吗?

flash - 如何判断网站上是否加载了 Flash?

MySQL+PHP+Flash+as3 如何在离线编程中将Flash AS3 2d RPG游戏中的数据保存到mySql中?

javascript - angular.bind 与 ECMAScript 5 .bind

javascript - 使用 Three.js 对几何体应用平移、旋转和缩放后如何获取顶点位置?

Flash关系图

apache-flex - Flexlib ScheduleViewer..如何处理项目的点击