在HTML AIR应用程序中访问NativeWindow的内容?

时间:2010-04-27 14:58:10

标签: javascript html air nativewindow

我目前正在构建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)
}

但是,我希望能够做的是在加载后从cover.html内操作 html内容。似乎有大量的在线教程如何移动,调整大小等NativeWindow,但我只想访问NativeWindow的HTML内容。

例如,如何向该页面添加新段落?我尝试了以下内容:

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内部内容的经验吗?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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>')
}

:)

答案 1 :(得分:0)

我不确定这会产生你想要的效果:

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

设置var doc = window.document.documentElement;的作用是什么,因此'doc'是您的本地文档,而不是其他窗口中的文档。

我认为你想要的是

var doc = newHtmlLoader.window.document.documentElement;

请注意,在文档加载之前,这不起作用。