1

Flex 应用程序是否可以通过 ExternalInterface 获取有关 HTML 文档的任何信息?例如,Flex 能否找出特定的 DIV 是否存在?

4

3 回答 3

0

在回答另一个问题时,我解释了ExternalInterface实际工作原理。你可以从中得到一个简单的“是”。

[编辑]一些示例代码:

var jsFunc:String = 'function () { return document.getElementById("test") != null; }';
var divExists:Boolean = ExternalInterface.call(jsFunc);

应该澄清事情......

于 2010-02-11T14:43:16.497 回答
0

ExternalInterface 是包含页面的 Javascript 接口,因此在 javascript 中可能发生的任何事情都可以通过 ExternalInterface,直接或通过托管页面上的函数实现。

来自 ExternalInterface 的 AnonymousFunctionCall

于 2010-02-11T14:44:43.467 回答
0

Flex 应用程序是否可以通过 ExternalInterface 获取有关 HTML 文档的任何信息?

查看JSInterface - ActionScript 3 的 JavaScript API。两个首页示例被称为:

我目前使用这个库,它非常强大。我曾经问过他(Oleg Galaburda)我是否应该使用它来简单地调整 swf 的大小。他说过类似“如果您只需要在 javascript 中执行一些操作,只需坚持使用 ExternalInterface。如果您需要访问 ActionScript 中的 DOM,请使用它”。

svn 存储库中有数百个示例。他在这件事上做得很棒。它将 JavaScript 对象转换为 ActionScript 并返回,因此您可以使用完整的类。重建它需要大量的工作,所以它是跨浏览器和一切。他做到了!

JSInterface 中的所有内容基本上都是一个动态类,因此您可以轻松地钻取 DOM。下面是一些示例方法(在 ActionScript 中):

protected function testCSS():void
{
    var styleTag:JSHTMLElement = JSInterface.pushCSS('.text{font-weight:bold;color:#ff00ff;font-size:90;text-decoration:underline;}');
    var font:JSHTMLElement = JSInterface.document.createElement('font');
    font.innerHTML = 'Hello world!';
    font.setAttribute('class', 'text');
    font.className = 'text';
    JSInterface.document.body.appendChild(font);
    trace(styleTag); 
}                   

protected function insertIFrame():void
{   
    var body:JSDynamic = JSInterface.document.getElementsByTagName('body')[0];
    var frame:JSDynamic = JSInterface.document.createElement("iframe");
    frame.width = 300;
    frame.height = 300;
    if (JSInterface.navigator.appName.indexOf('Microsoft')>=0)
    {
        frame.onreadystatechange = function():void
        {
            trace(frame.readyState);
        };
    }
    else
    {
        frame.onload = function():void
        {
            trace('iFrame loaded');
        };
    }
    frame.src = 'http://actualwave.com';
    body.appendChild(frame);            
}          

该库在内部使用 ExternalInterface 来处理所有内容。但是要将 DOM 序列化/反序列化到 ActionScript 或从 ActionScript 中序列化/反序列化,这是一项繁重的工作。这个库应该可以解决问题。

希望这会有所帮助,兰斯

于 2010-02-16T08:46:04.180 回答