在Flash中使用外部接口

在Flash中使用外部接口,flash,actionscript,externalinterface,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 fu

我试图编辑一些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
(即:错误检查等)的最佳方式是什么?

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

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

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


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

谢谢,我以为回调方法就是为了这个。关于为什么我没有看到警报(在我的代码中)有什么想法吗?请尝试跟踪ExternalInterface.available属性。它会告诉您闪存是否在允许已终止呼叫的容器中运行。用这样的东西读更多@//测试external.js调用import flash.external.ExternalInterface//外部接口可用吗?var isAvailable:Boolean=ExternalInterface.available;微量元素(可利用);运行此操作时,我应该查找什么?抱歉,我不知道如何发布代码。有人能读懂吗?你应该看看“可用”是真是假。如果不是,那就是你的问题。