所以我们得到了一个包含各种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 \ 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的
答案 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>