2010-04-27 62 views
3

我目前正在構建一個HTML/JS AIR應用程序。應用程序需要向用戶顯示不同的「窗口」 - 取決於這是他們第一次啓動應用程序。這部分實際上是很好,我有下面的代碼來做到這一點:在HTML AIR應用程序中訪問NativeWindow的內容?

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的HTML內容。

例如,我將如何添加一個新的段落到該頁面?我已經試過如下:

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

使用AIR的內部檢查的控制檯,... .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

我不知道這有你想要的效果:

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

什麼是不設置var doc = window.document.documentElement;,所以「文檔」是您的本地文件,而不是一個在另一個窗口。

我想你想要的是

var doc = newHtmlLoader.window.document.documentElement; 

注意,這將無法工作,直到該文件已加載。

+0

感謝您的反饋雅各布。我嘗試了你所說的,但不幸的是還是一無所獲。 我在5秒鐘之後使用setTimeout()調用函數來試圖插入段落,但那也不起作用,所以它似乎不是未加載文檔的問題。 – 2010-04-27 15:54:39

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>') 
} 

:)

+0

完美,解決了我的問題!謝謝:)不是很清楚如何在空氣應用程序中的兩個窗口之間傳遞數據... – 2012-08-04 21:06:12

相關問題