huoyu123 发表于 2011-3-1 17:26:17

获取有关外部容器的信息,从 ActionScript 中调用外部代码

本帖最后由 huoyu123 于 2011-3-1 17:26 编辑

ExternalInterface.available 属性指示当前的 Flash Player 是否位于提供外部接口的容器中。如果外部接口可用,则此属性为 true;否则,为 false。在使用 ExternalInterface 类中的任何其它功能之前,应始终进行检查以确保当前容器支持外部接口通信,如下所示:
if (ExternalInterface.available) {   // Perform ExternalInterface method calls here. }注: ExternalInterface.available 属性报告当前容器是否为支持 ExternalInterface 连接的容器类型。它不会报告当前浏览器中是否启用了 JavaScript。
通过使用 ExternalInterface.objectID 属性 (property),您可以确定 Flash Player 实例的唯一标识符(具体来说,是指 Internet Explorer 中 object 标签的 id 属性 (attribute),或者是指使用 NPRuntime 接口的浏览器中 embed 标签的 name 属性 (attribute))。这个唯一的 ID 代表浏览器中的当前 SWF 文档,并可用于对 SWF 文档进行引用 — 例如,在容器 HTML 页中调用 JavaScript 函数时进行引用。当 Flash Player 容器不是 Web 浏览器时,此属性为 null。

// calls the external function "addNumbers" // passing two parameters, and assigning that function's result // to the variable "result" var param1:uint = 3; var param2:uint = 7; var result:uint = ExternalInterface.call("addNumbers", param1, param2);如果容器为 HTML 页,此方法将调用具有指定名称的 JavaScript 函数,必须在包含 HTML 页中的 script 元素中定义该函数。JavaScript 函数的返回值被传递回 ActionScript。
<script language="JavaScript">   // adds two numbers, and sends the result back to ActionScript   function addNumbers(num1, num2)   {         return (num1 + num2);   } </script>如果容器为其它的 ActiveX 容器,此方法将导致 Flash Player ActiveX 控件调度它的 FlashCall 事件。Flash Player 将指定的函数名及所有参数序列化为一个 XML 字符串。容器可以在事件对象的 request 属性中访问该信息,并用它来确定如何执行它自己的代码。为了将值返回 ActionScript,容器代码会调用 ActiveX 对象的 SetReturnValue() 方法,并将结果(序列化为一个 XML 字符串)作为该方法的参数进行传递。有关用于此通信的 XML 格式的详细信息,请参阅外部 API 的 XML 格式。
无论容器为 Web 浏览器还是为其它 ActiveX 容器,只要调用失败或容器方法没有指定返回值,都将返回 null。如果包含环境属于调用代码无权访问的安全沙箱,ExternalInterface.call() 方法将引发 SecurityError 异常。可以通过在包含环境中为 allowScriptAccess 设置合适的值来解决此问题。例如,要在 HTML 页中更改 allowScriptAccess 的值,请编辑 object 和 embed 标签中的相应属性。


页: [1]
查看完整版本: 获取有关外部容器的信息,从 ActionScript 中调用外部代码