2014-06-17 1 views
0

일부 이벤트 처리기와 함께 일부 자바 스크립트가 포함 된 XUL 오버레이가 포함 된 Firefox 확장이 있습니다. 그 중 DOMContentLoaded의 경우 EventListener입니다. 특정 웹 사이트를 방문 할 때만로드하려는 두 번째 오버레이가 있습니다. DOMContentLoaded 이벤트 데이터 제공,ContentWindow 또는 HTMLDocument의 XULDocument를 Firefox 확장자로 호스팅 하시겠습니까?

var appcontent = document.getElementById("appcontent"); // browser 
if (appcontent) appcontent.addEventListener("DOMContentLoaded", onPageLoad, true); 

function onPageLoad(event) { 
    var doc = iEvent.originalTarget; // doc is document that triggered "onload" event 
    var win = doc.defaultView; 

    if (doc.nodeName != 'document') return; // only documents 
    if (win != win.top) return; //only top window. 
    if (win.frameElement) return; // skip iframes/frames 

    if(doc.location.href.search('http://somewebsite.com/') > -1) { 
     //Find XULDocument somehow 
     //var xulDoc = ??????; 
     xulDoc.loadOverlay('chrome://myextension/content/secondoverlay.xul', null);    
    } 
} 

은 어떻게 DOM을 호스팅하는 XULDocument를 검색 할 수 있습니다

여기에 코드의 일부는 내가 지금까지 가지고있어?

답변

1

글쎄, XUL 창이 단지 window 일뿐입니다. 글로벌 범위.

그래서 다음 두 줄은 작업과 모두 동일해야한다 : 그러나

window.document.loadOverlay(...); 
document.loadOverlay(...); 

, 대부분이는 XUL 윈도우가 여전히 호스트하는 주요 browser.xul 때문에 당신이 원하는 것을 정말 아니다 콘텐츠 창. 콘텐츠 창당 전용 창은 XUL입니다! 두 번째 오버레이를로드하면 "탭"(또는 기타)이 아닌 브라우저 창 전체가 오버레이되어 탭 (콘텐츠 창)을 닫거나 다른 곳으로 이동하면 그대로 유지됩니다.

이제 질문은 : 달성하고자하는 것은 무엇입니까?

특정 페이지에만 UI (툴바 버튼, 메뉴 등)를 표시 하시겠습니까? 그런 다음 일반적으로 모든 항목을 첫 번째로드 (예 : '첫 번째'오버레이) 한 번 오버레이하고 규칙에 따라 UI를 숨기거나 표시합니다. 탭 전환 및/또는 페이지로드를 처리 할 때 일부 코드 스 니펫은 Tabbed Browser을 참조하십시오.

또는 실제로 콘텐츠 창 자체에 뭔가를 적용하려고합니다. 그런 다음 일반적으로 콘텐츠 창의 DOM을 직접 수정합니다.