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网上似乎有很多关于如何移动、调整大小等的教程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编程方式访问 a 的内部内容的经验吗?任何帮助将不胜感激。

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;

所做的是 set var doc = window.document.documentElement;,所以 'doc' 是您的本地文档,而不是另一个窗口中的文档。

我想你想要的是

var doc = newHtmlLoader.window.document.documentElement;

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

于 2010-04-27T15:20:11.270 回答