我目前正在构建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
内部内容的经验吗?任何帮助将不胜感激。
答案 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;
请注意,在文档加载之前,这不起作用。