4

我正在尝试编辑一些 Flash 以进行外部 javascript 函数调用,但没有成功。这是我的动作脚本 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(即错误检查等)在此先感谢...

4

2 回答 2

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!");
于 2009-05-04T10:20:12.187 回答
0

正如其他人在对 Johan 的帖子的评论中所说的那样,您应该首先通过检查 ExternalInterface.available 来检查外部接口是否可用。

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

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

于 2009-05-08T15:50:26.377 回答