在Flash中使用ExternalInterface

时间:2009-05-03 21:48:34

标签: flash actionscript externalinterface

我正在尝试编辑一些flash以进行外部javascript函数调用,但没有成功。这是我的actionscript 2.0代码:

//testing external .js calls

import flash.external.ExternalInterface;

//attempting to make external js call

ExternalInterface.call("createPlaylist","It's my Life!");

这是我的javascript;

function createPlaylist(mess){
  alert("called createPlaylist: " + mess);
}

我见过很多例子,我对ExternalInterface.addCallback的使用感到困惑。我不需要javascript将任何内容返回给flash,这是必要的吗?

无论出于何种原因,我都看不到警报。有没有人在我的代码中看到任何问题?我没有一些ExternalInterface库吗?此外,使用ExternalInterface的最佳方式是什么(即错误检查等),提前谢谢...

2 个答案:

答案 0 :(得分:7)

ExternalInterface.addCallback用于使javascript能够调用您的Flash应用程序。例如,如果您想要一个启动/停止视频的HTML按钮,您只需为命名方法添加一个回调,而您的js可以调用[FlashObject] .callback方法名称。

我想说在应用程序中添加ExternalInterface方法的最佳方法是为应用程序中的每个交互案例设置一个负责JS通信的类。例如:

public class ExternalVideoControl {

    private var video:MediaDisplay;

    public function ExternalVideoControl(video:MediaDisplay) {
        //ExternalInterface.addCallback  - one callback for each method you want to expose, pointing to a method within this class;
        //add listeners on the video player and point them to methods in this class, for example onProgress
    }
    public function playVideo():void {
        //play the video on the mediaDisplay
    }
    private function onProgress(event:ProgressEvent):void {
        //ExternalInterface.call - report progress back to javascript
    }
}

要更直接地测试ExternalInterface,请尝试调用

ExternalInterface.call("alert", "Hello World!");

答案 1 :(得分:0)

正如其他人在对Johan的帖子的评论中所说,如果通过检查ExternalInterface.available可以获得外部接口,则应首先检查。

除此之外......您如何启动Flex应用程序?首先,它必须包含在包含此JavaScript的包装器中。那是微不足道的。但是,如果您从本地文件系统(浏览器URL以file://开头)将其作为文件启动,则还必须确保SWF文件具有运行JavaScript函数所需的权限。

您必须信任SWF文件,以使其能够访问本地资源(如文件)或本地文件上的JS。为此,请创建一个类似myapp.cfg的文件,并将该文件的路径作为一行添加到此行。将此文件放在FlashPLayerTrust文件夹中。在Linux系统上,这是〜/ .macromedia / Flash_Player / #Security / FlashPlayerTrust /.