2014-07-25 7 views
1

Firefox 전기 첨가물을 작성하려고합니다. e10s 창을 열고 페이지 요소를 마우스 오른쪽 버튼으로 클릭하면 document.popupNode를 e10s 창에서 사용할 수 없습니다.Firefox에서 document.popupNode를 얻는 방법 전기 분해 창

var WindowListener = { 
    setupBrowserUI: function(window) { 
     // 
    }, 
    tearDownBrowserUI: function(window) { 
    }, 
    // nsIWindowMediatorListener functions 
    onOpenWindow: function(xulWindow) { 
     var domWindow = xulWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor) 
           .getInterface(Components.interfaces.nsIDOMWindow); 
     // Wait for it to finish loading 
     domWindow.addEventListener("load", function listener() { 
      domWindow.removeEventListener("load", listener, false); 
      // If this is a browser window then setup its UI  
      if (domWindow.document.documentElement.getAttribute("windowtype")=="navigator:browser") { 

       domWindow.document.getElementById('contentAreaContextMenu').addEventListener("popupshowing", function(event){ 

        let document=event.currentTarget.ownerDocument; 
        let prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); 
        prompts.alert(null, "Test", document.popupNode);      

       }, false); 

      } 

     }, false); 
    }, 
    onCloseWindow: function(xulWindow) { 
    }, 
    onWindowTitleChange: function(xulWindow, newTitle) { 
    } 
}; 

let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]. 
     getService(Components.interfaces.nsIWindowMediator); 
// Wait for any new browser windows to open 
wm.addListener(WindowListener); 

테스트 코드는 Scratchpad에서 사용할 수 있습니다. 테스트 코드를 실행 한 후 새로운 일반 Firefox 창을 열고 웹 페이지를 마우스 오른쪽 단추로 클릭하십시오. document.popupNode에 대한 프롬프트 경고가 나타납니다.

그러나 새 e10s Firefox 창이 열리고 오른쪽 클릭하면 아무 것도 표시되지 않습니다.

e10s 창에서 document.popupNode를 얻으려면 어떻게해야합니까?

답변

1

XUL 문서가 노드에서 아무 것도 팝업하지 않았기 때문에 document.popupNode이 없습니다. 대신 특정 화면 좌표에 메뉴를 표시하라는 메시지를 하위 프로세스에서 받았습니다.

gContextMenuContentData.event.target에서 채워지는 gContextMenu.target을 대신 사용하십시오.

gContextMenu.target은 모든 브라우저 창에서 사용할 수 있으며 gContextMenuContentData.event.target은 e10s 창에서만 사용할 수 있습니다.

물론 gContextMenu은 팝업이 표시되거나 표시 될 때만 유효합니다.