【问题标题】:Flash AS2.0 and JavaScript/jQuery (ExternalInterface) CommunicationFlash AS2.0 与 JavaScript/jQuery (ExternalInterface) 通信
【发布时间】:2011-01-02 09:45:48
【问题描述】:

我正在尝试使用 JS 通过 ExternalInterface 将数据发送到我的 Flash AS2.0 音乐播放器,但我找不到关于 ExternalInterface 的好的教程或指南。我希望能够通过单击 JavaScript 链接来更改播放器中的当前歌曲,并在页面/窗口加载而不单击时播放默认歌曲。

我不需要关于在 Flash 中加载声音等的超级复杂的答案,我只是在让 JS 向 Flash 发送任何东西时遇到很多困难,当我让它工作时 - 如果我需要放一些/else进入flash判断链接是否被点击?

谢谢

现在编辑这里的代码:

AS 2.0

import flash.external.ExternalInterface;

ExternalInterface.addCallback('loadSong', null, flashFunction);

function flashFunction (val) {
    extra = val;
}

JavaScript

var flashObj = document.getElementById('VSPLAYER');

function loadSong(val) {
    return val
}

HTML

<a href="javascript:loadSong('2')">Play song 2</a>

<object id="VSPLAYER" type="application/x-shockwave-flash" data="vs_player.swf" width="280" height="90">
<param name="movie" value="vs_player.swf" />
<param name="allowscriptaccess" value="always" />
</object>

【问题讨论】:

    标签: javascript flash actionscript-2 externalinterface


    【解决方案1】:

    在您的 Flash 中,最好是在第一帧中,输入以下内容:

    ExternalInterface.addCallback('callFlashFunction', null, yourFlashFunction);
    
    function yourFlashFunction (arg1, arg2) { ... }
    

    在您的 Javascript 中,您可以通过以下方式调用它:

    var flashObj = document.getElementById ('FlashObjID');
    flashObj.callFlashFunction (arg1, arg2);
    

    如果您的 SWF 位于不同的域中,请记住允许通过以下方式访问脚本:

    <object id="FlashObjID"> ... <param name="allowscriptaccess" value="always" /> ... </object>
    

    更新(基于您的 HTML):

    <a href="#" onclick="return jsLoadSong('2')">Play song 2</a>
    
    <object id="VSPLAYER" type="application/x-shockwave-flash" data="vs_player.swf" width="280" height="90">
        <param name="movie" value="vs_player.swf" />
        <param name="allowscriptaccess" value="always" />
    </object>
    
    <script type="text/javascript">
        var flashObj = document.getElementById ('VSPLAYER');
        function jsLoadSong (val)
        {
            flashObj.loadSong (val);
            return false; // to prevent default link action
        }
    </script>
    

    我试图澄清名称以显示哪些是 Javascript 中的,哪些与 Flash 相关联。另请注意,在调用定义flashObj 之前,您需要等到DOM 加载完毕。在这里,&lt;script&gt; 标签在&lt;object&gt; 之后,所以它可以正常工作。

    【讨论】:

    • 确保嵌入在 HTML 中的 Flash 有一个 id。这将使 ExternalInterface.addCallback 函数可被 IE 中的 javascript 识别。
    • flashObj.callFlashFunction (arg1, arg2);似乎无效,并且完全停止了我的 javascript 工作。我尝试将 callFlashFunction 设置为实际函数,但它仍然没有传递变量。
    • 检查你的 flashObj 是否真的是 Flash 对象(或者可能是 FF 中的 embed obj,取决于你的标记),并检查安全权限
    • 我远离嵌入,因为它不符合标准。仍然没有进展,如果我能记住如何更改代码,我可能会尝试在此处发布我的代码,看看是否有任何改变..
    • @abysslogic - 您需要致电 &lt;flashObj&gt;.loadSong () - 也许发布您的 HTML sn-p 会有所帮助
    【解决方案2】:

    感谢您的帖子,但是是的,那个 javascript 调用对我也无效。 折腾了这么多,终于搞定了:

    $(this)[0].loadSong();  
    

    (使用 jQuery,其中 flashObj 已被选中)

    希望这对某人有所帮助。

    如果不使用 jQuery,不确定是否需要 [0]。

    在其他地方读取实际的 HTML DOM 对象是在选择器数组的第一个槽中选择的。抱歉,我的解释有点笨拙,希望它可以帮助您使其正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多