0

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

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

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

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

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

   var clip:FlashClip = new FlashClip();

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

4

1 回答 1

1

文档说您尝试做的事情是不可能的:

在 Adob​​e AIR 中,ExternalInterface该类可用于在HTMLLoader控件中加载的 HTML 页面中的 JavaScript 与嵌入在该 HTML 页面中的 SWF 内容中的 ActionScript 之间进行通信。

为了ExternalInterface工作,它需要与浏览器提供的 Javascript“层”进行通信。您不会在 AIR 中获得此功能,除非您加载其中嵌入了 SWF 内容的 HTML 页面。

我已经链接到 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>
于 2012-10-19T16:55:26.117 回答