我试图使用JS将数据发送到带有ExternalInterface的Flash AS2.0音乐播放器,除了我找不到有关ExternalInterface的好教程或指南。我希望能够通过单击JavaScript链接更改播放器中的当前歌曲,并在页面/窗口加载时不点击,播放默认歌曲。
我不需要在flash等中加载声音的超级复杂的答案,我只是在让JS向Flash发送任何内容时遇到很多困难,当我开始工作时 - 我是否需要放一些if /否则进入闪存以确定链接是否已被点击?
由于
编辑下面的代码:
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>
答案 0 :(得分: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绑定的。另请注意,在调用定义flashObj
之前,您需要等到DOM加载。在这里,<script>
标记位于<object>
之后,因此可以正常使用。
答案 1 :(得分:1)
感谢帖子,但是,javascript调用对我也无效。 经过大量的捣乱,终于得到了它的工作:
$(this)[0].loadSong();
(使用jQuery,已经选择了flashObj)
希望这有助于某人。
如果不使用jQuery,不确定是否需要[0]。
在其他地方读取在选择器数组的第一个插槽中选择实际的HTML DOM对象。对不起,我的解释有点无趣,只希望它可以帮助你实现它。