flash:ExternalInterface适用于embed标签,但不适用于object标签

Yuv*_* A. 5 javascript flash actionscript-3 externalinterface

据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>
Run Code Online (Sandbox Code Playgroud)

尝试在SWF中调用AS3函数时,从Javascript:

     var flashObj = document.getElementById('theFlash');
     flashObj.someASFunction();
Run Code Online (Sandbox Code Playgroud)

(在AS方面:)

     import flash.external.*;
     function someASFunction() {
        //show some text
     }
     ExternalInterface.addCallback("someASFunction", someASFunction);
Run Code Online (Sandbox Code Playgroud)

不会在Firefox和Chrome的工作.闪光灯工作和加载.flashObj确实获得了对象的引用,但someASFunction未定义且不会被调用.

如果我用embed标签替换object标签:

   <embed id="theFlash" name="theFlash" height="225" width="400" align="middle" 
    type="application/x-shockwave-flash" allowscriptaccess="always"
    src="theflashfile.swf" />
Run Code Online (Sandbox Code Playgroud)

然后它适用于Firefox和Chrome(AS函数被调用并正常工作) - (虽然它在IE中不起作用).

怎么用对象标签不起作用?
使用embed标签而不是object标签有多"安全"?它不是过时的吗?

注意,它绝对不是时间问题 - 如果我从一个onclick函数调用JS的AS函数 - 那么结果是相同的.

小智 1

对于静态嵌入(我更喜欢),我使用这段代码(这个代码用于我的隐形 mp3 播放器):

<object style="position:fixed" id="1pixPlayer" width="1" height="1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
    <param value="transparent" name="wmode">
    <param value="1pxMp3.swf" name="movie">
    <param value="always" name="allowScriptAccess">
<embed name="1pixPlayer" width="1" height="1" type="application/x-shockwave-flash" wmode="transparent" allowscriptaccess="always" src="1pxMp3.swf"></object>
Run Code Online (Sandbox Code Playgroud)