2011-03-29 63 views

回答

0

ExternalInterface.call可用于从一个 SWF和,反之亦然调用JavaScript ,ExternalInterface.addCallback可用于暴露的某些方法由 JavaScript调用

例如,在每个SWF,你可能有:

ExternalInterface.addCallback("externalStopAudio", stopAudio); 

// later.. 
function stopAudio():void { 
    // Code to stop audio 
    _audioStream.stop(); 
} 

function playAudio():void { 
    // tell JS to stop all audio 
    ExternalInterface.call("stopAllAudio"); 
    // play this players audio 
    _audioStream.play(); 
} 

然后在它是一个包含SWF文件的HTML部分JS:

<script> 
    // these references need to be actual pointers to the SWFs, this will vary 
    // depending on how you have it setup - might be SWFObject, Jquery, etc 
    var a = [swf1, swf2, swf3]; 

    // called by SWF 
    function stopAllAudio() { 
     // called to SWF 
     for(var i = 0; i < a.length; i++) { 
      a[i].externalStopAudio(); 
     } 
    } 

</script> 

根据安全设置/域放置,您可能需要以下条件:

在HTML:

<param name="allowScriptAccess" value="always" /> 

在SWF:

flash.system.Security.allowDomain(sourceDomain) 

参见:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#addCallback%28%29

0

您可以使用javascript与网页进行通信,然后网页可以与其他swf进行通信。

1

更完整的解决方案将使用LocalSharedObject:http://www.adobe.com/products/flashplayer/articles/lso/

在启动时,SWF生成一个GUID,然后加载LSO,并绑定到一个该LSO的财产(如'当前活动GUID')。然后,无论用户什么时候玩,瑞士法郎都会向LSO写信。这将通知所有的swfs音乐正在播放,不需要JavaScript。这也适用于所有标签,所以如果swf在另一个标签上播放,它将停止(另外,google和chrome使用相同的LSO,因此它可以跨浏览器使用:-))