在Adobe Air 3.4 Actionscript 3应用程序中处理来自本地swf文件的ExternalInterface Call

时间:2012-10-19 14:53:36

标签: actionscript-3 air externalinterface

所以我们得到了一个包含各种swf文件的播放列表,一些旧的as2动画,一些更新的。 我们将它们下载到本地文件夹,并可以全屏播放。所有一个AIR(actionscript)应用程序。现在我们知道在较新的文件中有ExternalInterface.Call(一些参数)调用。我们需要在托管AIR应用程序中处理它们。到目前为止,我们有一个继承自MovieClip的类,具有以下构造函数:

public function FlashClip()
    {
        ExternalInterface.addCallback("FlashPlayerControl1FlashCall",FlashPlayerControl1FlashCall);
    }

当我们运行应用程序时出现以下错误:

  

错误:错误#2067:此容器中的ExternalInterface不可用。 ExternalInterface需要Internet Explorer ActiveX,Firefox,Mozilla 1.7.5和更高版本,或其他支持NPRuntime的浏览器。       at Error $ / throwError()       在flash.external :: ExternalInterface $ / addCallback()       在Video :: FlashClip()[C:\ Users \ Daan \ Adob​​e Flash Builder 4.6 \ TINS​​-v2-1 \ TINS​​V2 \ src \ Video \ FlashClip.as:12]       在Video :: FlashPlayer / BestandOpend()[C:\ Users \ Daan \ Adob​​e Flash Builder 4.6 \ TINS​​-v2-1 \ TINS​​V2 \ src \ Video \ FlashPlayer.as:43]

在以下行中:(FlashPlayer.as:43)

   var clip:FlashClip = new FlashClip();

所以,我的问题是这个。是我们正在努力做到的事情。或者我们是否需要在actionscript AIR应用程序中嵌入一个javascript容器?或者有谁知道我们将如何让这个工作?注意:我们无法更改现有的swf文件。我们甚至没有原始的.fla的

1 个答案:

答案 0 :(得分:1)

documentation说明你要做的事情是不可能的:

  

在Adobe AIR中,ExternalInterface类可用于通信   在HTMLLoader控件中加载的HTML页面中的JavaScript之间   和嵌入在该HTML页面中的SWF内容中的ActionScript。

要使ExternalInterface生效,它需要与浏览器提供的Javascript“图层”进行通信。除非您加载嵌入了SWF内容的HTML页面,否则您将无法在AIR中获得此功能。

我已经链接到HTMLLoader的文档,可以让你这样做。

<强> [编辑]

添加一个简单的AIR应用程序(注意它是Flex 3.6,很遗憾,这是我的客户使用的)加载网页,以防它有用。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
                        layout="absolute"
                        width="800" height="600"
                        creationComplete="onCreationComplete()">

    <mx:Script>
        <![CDATA[
            import mx.core.UIComponent;

            private function onCreationComplete():void
            {
                var loader:HTMLLoader = new HTMLLoader();
                var request:URLRequest = new URLRequest("http://www.adobe.com");
                loader.width = 800;
                loader.height = 600;
                loader.load(request);
                var uic:UIComponent = new UIComponent();
                uic.addChild(loader);
                addChild(uic);
            }
        ]]>
    </mx:Script>
</mx:WindowedApplication>