4

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

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

谢谢

编辑继承人现在的代码:

作为 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>
4

2 回答 2

9

在您的 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 相关联。另请注意,您需要等到 DOM 加载后才能调用 define flashObj。在这里,<script>标签在 之后<object>,所以它可以正常工作。

于 2010-01-07T08:36:23.223 回答
1

感谢您的帖子,但是是的,那个 javascript 调用对我也无效。经过这么多的混乱,终于让它工作了:

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

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

希望这可以帮助某人。

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

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

于 2012-03-22T07:25:32.170 回答