2014-07-11 2 views
0

기본 브라우저 창에서 링크를 클릭하면 다른 팝업 브라우저 창이 나타납니다. 팝업 브라우저 창을 감지하고 문서 객체를 가져와야합니다. 내 재판은 다음과 같습니다 :Firefox XUL에서 팝업 창의 "문서"개체를 가져 오는 방법은 무엇입니까?

wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] 
    .getService(Components.interfaces.nsIWindowMediator); 
var recentWindow = wm.getMostRecentWindow("navigator:browser"); 
if (recentWindow) { 
    var tabBrowser = recentWindow.getBrowser(); 
    alert(tabBrowser.contentDocument.body.innerHTML); 
} 

하지만 아무것도 얻지 못했습니다.

답변

0

나는 아직 창이 열리지 않았을 것으로 생각하고있다. 또한 사용할 필요가 없습니다 getBrowser() 그냥 수행 recentWindow.gBrowser.contentDocument || recentWindow.document 창 수신기를 사용하면 모든 시작 창을 잡을 수 있습니다.

그래서이 윈도우 청취자 물건입니다 :

Cu.import('resource://gre/modules/Services.jsm'); 
var windowListener = { 
    onOpenWindow: function (aXULWindow) { 
     // Wait for the window to finish loading 
     let aDOMWindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow); 
     aDOMWindow.addEventListener("load", function() { 
      aDOMWindow.removeEventListener("load", arguments.callee, false); 
      var document = aDOMWindow.gBrowser.contentDocument || aDOMWindow.document; 
      aDOMWindow.alert(document.body.innerHTML || 'doc has no body element'); 
      Services.wm.removeListener(windowListener); 
     }, false); 
    }, 
    onCloseWindow: function (aXULWindow) {}, 
    onWindowTitleChange: function (aXULWindow, aNewTitle) {} 
}; 

다음이 작업을 수행 링크를 클릭 직전 : Services.wm.addListener(windowListener);

+0

감사 Noitidart을. 사실 창문이 아직 열리지 않았다고 했잖아. 그게 전부입니다. 나는 다른 창문이 열릴 때까지 반복해야했다. – user3377708

+0

아래 해결책 코드를 알려주십시오. 네가 어떻게 돌아가고 있는지보고 싶어. 위험한 성능을 현명하게 반복합니다. – Noitidart

+0

"setInterval()"함수를 사용하여 팝업 폼이 나타날 때마다이를 감지했습니다. – user3377708