我正在 AS3 中构建一个简单的音频播放器。我想在我的 html 中嵌入这个音频播放器的多个实例,当一个人正在播放时,其他人会暂停。是否可以使用 LocalConnection 在同一 swf 的不同实例之间进行通信?根据我的测试,一旦与一个实例建立连接,其他实例就会抛出错误......
我的另一个选择是使用 javascript。还有其他想法吗?
我正在 AS3 中构建一个简单的音频播放器。我想在我的 html 中嵌入这个音频播放器的多个实例,当一个人正在播放时,其他人会暂停。是否可以使用 LocalConnection 在同一 swf 的不同实例之间进行通信?根据我的测试,一旦与一个实例建立连接,其他实例就会抛出错误......
我的另一个选择是使用 javascript。还有其他想法吗?
对于所有感兴趣的人,这是我的简单实现。
Javascript代码
//keep a reference to every player in the page
players = [];
//called by every player
function register(id)
{
players.push(id);
}
//stop every player except the one sending the call
function stopOthers(from_id)
{
for(var i = 0; i < players.length; i++)
{
var id = players[i];
if(id != from_id)
{
//setEnabled is a callback defined in AS3
thisMovie(id).setEnabled(false);
}
}
}
//utility function to retreive the right player
function thisMovie(movieName)
{
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
AS3 代码
if(ExternalInterface.available)
{
ExternalInterface.addCallback("setEnabled", setEnabled);
ExternalInterface.call("register", ExternalInterface.objectID);
}
function setEnabled(value:Boolean):void
{
//do something
}
//when I want to stop other players
if(ExternalInterface.available)
ExternalInterface.call("stopOthers", ExternalInterface.objectID);
它在 IE、FF 中运行良好。
在 chrome 中return document[movieName];
返回未定义。
我刚刚替换为return document.getElementById(movieName)
. 现在也可以使用 Chrome。