3

現在、HTML/JS AIR アプリケーションを作成しています。アプリケーションは、ユーザーがアプリケーションを初めて起動したかどうかに応じて、異なる「ウィンドウ」をユーザーに表示する必要があります。この部分は実際には問題なく、それを行うための以下のコードがあります。

if(!startUp()) { // this simply returns a boolean from a local preferences database that gets shipped with the .air
        // do first time stuff
        var windowOptions = new air.NativeWindowInitOptions();
            windowOptions.systemChrome = 'none';
            windowOptions.type = 'lightweight';
            windowOptions.transparent = 'true';
            windowOptions.resizable = 'false';
        var windowBounds = new air.Rectangle(300, 300, 596, 490);
        var newHtmlLoader = air.HTMLLoader.createRootWindow(true, windowOptions, true, windowBounds);
            newHtmlLoader.load(new air.URLRequest('cover.html'));
}
else {
    // display default window
    // just set nativeWindow.visible = true (loaded from application.xml)
}

しかし、私ができるようにしたいのは、html コンテンツがロードされた後に内部から操作することです。cover.htmlの移動、サイズ変更などのチュートリアルがオンラインでたくさんあるようですが、単にの HTML コンテンツNativeWindowにアクセスしたいだけです。NativeWindow

たとえば、そのページに新しい段落を追加するにはどうすればよいでしょうか? 私は次のことを試しました:

newHtmlLoader.window.opener = window;               
var doc = newHtmlLoader.window.opener.document.documentElement;

AIR の Introspector コンソールを使用すると、 ....log(doc)が返されます[object HTMLHtmlElement]

うーん、有望ですね。次に試してみます:

var p = document.createElement('p');
var t = document.createTextNode('Insert Me');
p.appendChild(t);
doc.appendChild(p);

...しかし、何も挿入されません。の次の代替品も試しましたdoc

var doc = newHtmlLoader.window.opener.document.body; // .log(doc) -> [object HTMLBodyElement]
var doc = newHtmlLoader.window.opener.document; // .log(doc) -> Error: HIERARCHY_REQUEST_ERR: DOM Exception 3

...さらに、jQuery を使用した場合:

$(doc).append('<p>Insert Me</p>'); // again, nothing

NativeWindowでは、の内部コンテンツにプログラムでアクセスした経験のある人はいますか? どんな助けでも大歓迎です。

4

2 に答える 2

2

うーん、それで私はそれを行う方法を見つけたかもしれないと思います...元のコードを修正してローダーにイベントリスナーを追加した場合:

var newHtmlLoader = air.HTMLLoader.createRootWindow(true, windowOptions, true, windowBounds);
newHtmlLoader.addEventListener(air.Event.COMPLETE, doEventComplete);
newHtmlLoader.load(new air.URLRequest('cover.html'));

次に、以下を使用して、新しく作成されたウィンドウのコンテンツを操作できます(jQueryを使用していると仮定)。

function doEventComplete(event) {
    doc = $(event.currentTarget.window.document.body);
    doc.append('<p>Insert Me!</p>')
}

:)

于 2010-04-28T08:48:21.587 に答える
0

これがあなたが意図した効果があるかどうかはわかりません:

newHtmlLoader.window.opener = window;               
var doc = newHtmlLoader.window.opener.document.documentElement;

が行うことは setvar doc = window.document.documentElement;であるため、「doc」はローカル ドキュメントであり、他のウィンドウのドキュメントではありません。

あなたが望むのは

var doc = newHtmlLoader.window.document.documentElement;

ドキュメントが読み込まれるまで、これは機能しないことに注意してください。

于 2010-04-27T15:20:11.270 に答える