同一SWF的不同实例之间的LocalConnection?

时间:2009-08-21 19:21:57

标签: javascript actionscript-3 localconnection

我正在AS3中构建一个简单的音频播放器。我想在我的html中嵌入这个音频播放器的多个实例,当一个人正在播放时,其他人暂停了。是否可以使用LocalConnection在同一个swf的不同实例之间进行通信?根据我的测试,一旦与一个实例建立连接,其他实例就会抛出错误...

我的另一个选择是使用javascript。还有其他想法吗?

2 个答案:

答案 0 :(得分:4)

对于每个感兴趣的人,这是我的简单实现。

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);

答案 1 :(得分:1)

在IE,FF中效果很好。

chrome return document[movieName];中的

返回undefined。

我刚刚用return document.getElementById(movieName)替换。现在也可以使用Chrome。