2013-08-06 133 views
0

我使用下面的代碼:FireFox擴展:如何通過jQuery訪問頁面元素?

var myExtension = { 
    init: function() { 
     // The event can be DOMContentLoaded, pageshow, pagehide, load or unload. 
     if(gBrowser) gBrowser.addEventListener("DOMContentLoaded", this.onPageLoad, false); 
    }, 
    onPageLoad: function(aEvent) { 
     var doc = aEvent.originalTarget; // doc is document that triggered the event 
     var win = doc.defaultView; // win is the window for the doc 
     //alert("page is loaded \n" +doc.location.href); 
     // alert(doc.location.href.indexOf("facebook.com")); 
     if(doc.location.href.indexOf("facebook.com") == -1) 
     { 
      return; 
     } 
     alert("we are here"); 
     alert($("#blueBar").html()); 
    } 
} 
window.addEventListener("load", function load(event){ 
    window.removeEventListener("load", load, false); //remove listener, no longer needed 
    myExtension.init(); 
},false); 

它一直給undefined錯誤

+0

你可以對這個錯誤更具體?它是否提到未定義的變量或函數? –

+0

當我警告_ $('#bluebar')_它給** [對象] **,但是當我把它稱爲_html()_方法時,它說未定義。 – Volatil3

+0

並且Facebook總是有一個id = blueBar的元素,它在onPageLoad觸發前完全加載?嘗試通過開發人員工具(如螢火蟲)查看元素以確保其存在。如果是這樣,元素可能會在頁面後加載。 –

回答

3

$()將默認使用當前窗口的文檔。你的情況實際上是browser.xul。你需要在子文檔,您通過var doc = aEvent.originalTarget;已經有了工作,所以這應該工作,我認爲(未經測試)

$(doc).find("#blueBar") 
+0

中訪問它們你是否說我不能在擴展中使用$(#myelemt)的東西,我將不得不首先_find_然後使用它們? – Volatil3

+0

好吧,它似乎現在正在工作。我這樣做了:* $(doc).find(「#blueBar」)。html()*。首先調用它未定義,然後加載innerHTML。 – Volatil3

+0

在實踐中是(或有沒有辦法重新綁定jQuery?)。您仍然可以使用$(「#id」)在browser.xul中查找內容,但不能在子文檔中查看,所有選項卡或更具體地在選項卡中顯示的頁面都是子文檔。另外,我提到在XUL覆蓋附加組件中使用jQuery是不鼓勵的嗎? – nmaier