Flex ExternalInterface: возможно ли для ActionScript опросить HTML-документ? - PullRequest
1 голос
/ 11 февраля 2010

Есть ли способ для приложения Flex получить какую-либо информацию о документе HTML через ExternalInterface? Может ли Flex выяснить, существует ли конкретный DIV, например?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2010

ExternalInterface - это интерфейс Javascript с содержащей страницей, поэтому все, что возможно в javascript, возможно через ExternalInterface, напрямую или через функции на странице hoast.

AnnonymousFunctionCall из ExternalInterface

0 голосов
/ 16 февраля 2010

Есть ли способ для приложения Flex получить любую информацию о документе HTML через ExternalInterface?

Извлечь JSInterface - API JavaScript для ActionScript 3 ,Два примера на первой странице называются:

В настоящее время я использую эту библиотеку, и она очень мощная.Я спросил его ( Олег Галабурда ) один раз, стоит ли мне использовать это для простой возможности изменения размера swf.Он сказал что-то вроде «если вам нужно всего лишь сделать несколько шагов в javascript, просто придерживайтесь ExternalInterface. Если вам нужен доступ к DOM в ActionScript, используйте это».

В * 1023 есть сотни примеров* 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, это тонна работы.Эта библиотека должна сделать свое дело.

Надеюсь, это поможет, Лэнс

0 голосов
/ 11 февраля 2010

Отвечая на другой вопрос Я объяснил, как на самом деле работает ExternalInterface. То, что вы можете извлечь из этого, это простое «да».

[править] пример кода:

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

должен уточнить вещи ...

...