2012-05-03 44 views
1

我使用附加組件構建器創建了一個附加組件。我將內容腳本附加到pageModmain.js如何使用附加組件構建器在contentscript中使用contentscript訪問附加到網頁的變量

我的內容腳本計算使用document.createElement()創建的動態標記的數量。這是通過創建一個到document.createElement()的鉤子來完成的,並通過創建一個腳本標籤將這個函數添加到網頁中。我的代碼如下。

contentscriptFile:

addJS_Node ("var count=0;"); 
function LogDocCreateElement() 
{ 
    var oldDocumentCreateElement = document.createElement; 
    document.createElement = function(tagName) 
    { 
     var elem = oldDocumentCreateElement.apply (document, arguments);  
     console.log("Dynamically created a(n)", tagName); 
     count++;  
     return elem; 
    } 
} 
addJS_Node (null, null, LogDocCreateElement); 
function addJS_Node (text, s_URL, funcToRun) { 
    var D         = document; 
    var scriptNode       = D.createElement ('script'); 
    scriptNode.type       = "text/javascript"; 
    if (text)  scriptNode.textContent = text; 
    if (s_URL)  scriptNode.src   = s_URL; 
    if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()'; 
    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement; 
    targ.appendChild (scriptNode);  
} 
window.addEventListener("load", function() {alert(count) }, false); 

現在我得到未捕獲的異常:ReferenceError: count is not defined

如何訪問此count變量?

回答

1

請參閱the documentation關於內容腳本如何訪問網頁 - 他們沒有看到網頁添加到DOM的任何自定義屬性和方法。在你的情況,你就需要通過unsafeWindow對象來訪問count變量:

unsafeWindow.count++; 

然而,隨着文件指出,應避免如果以某種方式可以利用unsafeWindow。這裏明顯的做法是避免在頁面中創建count變量。因此,而不是這樣的:

addJS_Node ("var count=0;"); 

你只聲明變量:

var count = 0; 

但是,你需要更換unsafeWindow.document.createElement而非document.createElement爲了讓這種變化是網頁可見。在這裏避免unsafeWindow會更復雜,也許你可以使用mutation events代替?

+0

但是,如果我聲明爲'var count = 0',警報將顯示0 – user1335906

+0

@ user1335906:這是正確的 - 您的'document.createElement'函數從未被調用,因爲網頁看不到它。查看我答案的最後一段。 –

+0

我應該在哪裏更改document.createElement是否在'LogDocCreateElement()'或'addJSNOde()'對不起,我沒有得到你 – user1335906

相關問題