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 を確認してください。2 つのフロント ページの例が呼び出されます。

私は現在このライブラリを使用していますが、非常に強力です。私は一度彼 ( 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 を使用してすべてを処理します。しかし、ActionScript との間で DOM をシリアライズ/デシリアライズするには、膨大な作業が必要です。このライブラリはそのトリックを行う必要があります。

これが役に立てば幸いです、ランス

于 2010-02-16T08:46:04.180 に答える