2012-06-28 4 views
2

열린 모든 Firefox 창에 숨겨진 iframe이 하나 필요합니다.JavaScript XPCOM 구성 요소에서 숨겨진 iframe/브라우저를 만드는 방법은 무엇입니까?

지금은 XUL 오버레이 내에 iframe을 만들므로 각 브라우저 창마다 만들어집니다.

모든 브라우저 창에 단일 iframe 인스턴스가 있어야 XPCOM 구성 요소를 사용해야한다고 생각하지만 XUL 요소를 만드는 방법을 찾을 수 없습니다.

가능합니까? JavaScript code modules 같은 - 당신이 필요로하는 모든이 더 좋은 방법이 있습니다 글로벌 코드를 실행 할 수있는 장소입니다 경우, 그러나

var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"] 
          .getService(Components.interfaces.nsIAppShellService) 
          .hiddenDOMWindow; 
var frame = hiddenWindow.document.getElementById("myExtensionFrame"); 
if (!frame) 
{ 
    var XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; 
    frame = hiddenWindow.document.createElementNS(XUL_NS, "iframe"); 
    frame.setAttribute("id", "myExtensionFrame"); 
    frame.setAttribute("src", "..."); 
    hiddenWindow.document.documentElement.appendChild(frame); 
} 

:

답변

3

당신은 hidden window 내부 프레임을 만들 수 있습니다.

+0

좋은 솔루션, 고마워,하지만 다른 사람이 내 숨겨진 창의 location.href 변경할 수 있으며 내 코드가 중단됩니다 것 같습니다. – KAdot

+1

@KAdot : 이론적으로 - 예. 실제적으로 그렇게하는 것은 꽤 파괴적 일 것이고 확장은 그렇게하지 않을 것입니다. –

+0

Firefox의 각 애드온은 핵심 브라우저 기능을 수정할 수있을뿐 아니라 다른 (경쟁 업체) 애드온을 방해 할 수있는 것처럼 필요한만큼 더 많은 제어 기능을 갖추고 있습니다 ... 그러나 이것이 가능하기 때문에 사람들이 이런 종류의 이상한 일을한다는 것을 의미하지는 않습니다 것들 ... 그래서, 당신은 안전하게 Addon이 숨겨진 윈도우 href를 변경하지 않는다고 가정 할 수 있습니다. –

관련 문제