Javascript flash:ExternalInterface可与嵌入标记一起使用,但不能与对象标记一起使用

Javascript flash:ExternalInterface可与嵌入标记一起使用,但不能与对象标记一起使用,javascript,flash,actionscript-3,externalinterface,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" />

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>
(在AS侧:)

这个在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中不工作)

为什么它不能与对象标记一起使用?
使用嵌入标记而不是对象标记有多“安全”?它不是过时了吗

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

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


对象元素是一个ActiveX控件,它只在IE中工作

w3c标准浏览器使用嵌入标记

通常,您应该创建如下所示的闪存:

    var fla, box = document.createElement("div");

    box.innerHTML = window.ActiveXObject?
        "<object id='ID_XXX' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='XXX.swf'></object>":
        "<embed src='XXX.swf'></embed>";

    fla = box.firstChild;
    document.body.appendChild(fla);
var fla,box=document.createElement(“div”);
box.innerHTML=window.ActiveXObject?
"":
"";
fla=box.firstChild;
文件.正文.附件(fla);

在使用推荐的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>

对我来说,如果我给嵌套的对象标记分配一个不同的id并准确地调用这个对象,它就会开始工作

        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="launcher"
                align="middle">
            <param name="movie" value="/flex-frontend/launcher.swf?version=1.3"/>
            <param name="flashvars"
                   value="sessionId=${session.id}"/>
            <param name="wmode" value="direct"/>
            <param name="allowFullScreen" value="true"/>
            <param name="bgcolor" value="#000000"/>
            <!--[if !IE]>-->
            <object type="application/x-shockwave-flash" id="launcher1" data="/flex-frontend/launcher.swf?version=1.3"
                    width="100%" height="100%">
                <param name="flashvars"
                       value="sessionId=${session.id}"/>
                <param name="wmode" value="direct"/>
                <param name="allowFullScreen" value="true"/>
                <param name="bgcolor" value="#000000"/>
                <!--<![endif]-->
                <a href="http://www.adobe.com/go/getflash">
                    Flash player version not less than 10.3 is required!
                </a>
                <!--[if !IE]>-->
            </object>
            <!--<![endif]-->
        </object>

适用于Chrome和FF。

不用担心静态嵌入,使用swfobject!嵌入标签包含在HTML5规范中。我遇到了同样的问题。当使用SWFObject2.2时,Chrome会获取对象标记,然后my AS函数就不起作用了。如果我使用SWFObject1.5,Chrome会得到嵌入标签,我的AS函数也会工作。我想使用最新的swfobject,但我还需要AS函数才能工作。这里有更新吗?有人找到解决方案了吗?我使用的SwfObject 2.2与Nick和IE一样,不执行对flash的调用:(
    var fla, box = document.createElement("div");

    box.innerHTML = window.ActiveXObject?
        "<object id='ID_XXX' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='XXX.swf'></object>":
        "<embed src='XXX.swf'></embed>";

    fla = box.firstChild;
    document.body.appendChild(fla);
    <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>
        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];

        }
        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="launcher"
                align="middle">
            <param name="movie" value="/flex-frontend/launcher.swf?version=1.3"/>
            <param name="flashvars"
                   value="sessionId=${session.id}"/>
            <param name="wmode" value="direct"/>
            <param name="allowFullScreen" value="true"/>
            <param name="bgcolor" value="#000000"/>
            <!--[if !IE]>-->
            <object type="application/x-shockwave-flash" id="launcher1" data="/flex-frontend/launcher.swf?version=1.3"
                    width="100%" height="100%">
                <param name="flashvars"
                       value="sessionId=${session.id}"/>
                <param name="wmode" value="direct"/>
                <param name="allowFullScreen" value="true"/>
                <param name="bgcolor" value="#000000"/>
                <!--<![endif]-->
                <a href="http://www.adobe.com/go/getflash">
                    Flash player version not less than 10.3 is required!
                </a>
                <!--[if !IE]>-->
            </object>
            <!--<![endif]-->
        </object>
// This doesn't work
// var flashObj = $("#launcher");
// But this does
var flashObj = $("#launcher1");
var screenshotData = flashObj.get(0).exportScreenshot();