其实只是FLEX中的一个“小”方法或技巧


涉及这个类:

flash.external
public final class ExternalInterface
继承ExternalInterface --> Object
语言版本: ActionScript 3.0
运行时版本: Flash Player 9, AIR 1.0

ExternalInterface 类是外部 API,这是一个在 ActionScript 和 Flash Player 容器之间实现直接通信的应用程序编程接口,例如,包含 JavaScript 的 HTML 页。Adobe 建议用 ExternalInterface 实现 JavaScript 与 ActionScript 之间的所有通信。



eg:比如我们要获取当前访问页面的url


var add:String=ExternalInterface.call("window.location.href.toString", 1);
                Alert.show(add);

112655671.png


后面两个参数是干啥的呢?查看FLEX的api文档:



public static function call(functionName:String, ... arguments):*


调用由 Flash Player 容器公开的函数,不传递参数或传递多个参数。如果该函数不可用,调用将返回 null;否则,它返回由该函数提供的值。允许在 Opera 或 Netscape 浏览器中使用递归;在这些浏览器上,递归调用将生成 null 响应。(Internet Explorer 和 Firefox 浏览器上支持递归。)


如果该容器是 HTML 页,则此方法在 script 元素中调用 JavaScript 函数。


如果该容器是某个其他 ActiveX 容器,此方法将使用指定的名称分派 FlashCall ActiveX 事件,并且该容器将处理该事件。

如果该容器承载 Netscape 插件,您可以写入对新 NPRuntime 接口的自定义支持或嵌入 HTML 控件以及在 HTML 控件内嵌入 Flash Player。如果嵌入 HTML 控件,则可以通过本机容器应用程序的 JavaScript 接口与 Flash Player 进行通信。

注意:对于在浏览器中运行的本地内容,仅当 SWF 文件以及包含它的网页(如果有)位于受信任的本地安全沙箱中时,才允许调用 ExternalInterface.call() 方法。此外,还可以在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,以防止 SWF 文件使用此方法。有关详细信息,请参阅 Flash Player 开发人员中心主题:安全性

在 Flash Player 10 和 Flash Player 9 Update 5 中,如果启用了弹出窗口阻止程序,则某些 Web 浏览器限制使用此方法。在这种情况下,只有在响应用户事件(例如,在鼠标单击或按键事件的事件处理函数中)时才能成功调用此方法。


参数 :


functionName:String — 要在容器中调用的函数的字母数字名称。若使用非字母数字函数名称,则将导致出现运行时错误(错误 2155)。可以使用 try..catch 块处理此错误。

...arguments传递到容器中的函数的参数。您可以指定零个或多个参数,参数之间用逗号分隔。它们可以是任何 ActionScript 数据类型。如果调用的是 JavaScript 函数,则会自动将 ActionScript 类型转换为 JavaScript 类型;如果调用的是某个其他 ActiveX 容器,则会在请求消息中对参数进行编码。
返回

* — 从容器接收的响应。如果调用失败,则会返回 null 并引发错误;例如,如果容器中没有此类函数、接口不可用、发生递归(使用 Netscape 或 Opera 浏览器)或出现安全问题。



这样就很明白了,比如我们调用Math中的max方法:

eg:

var add:String=ExternalInterface.call("Math.max", 555, 888);
                Alert.show(add);

112652905.png