2012-05-03 3 views
1

アドオンビルダーを使用してアドオンを作成しました。 pageModにコンテンツスクリプトを添付しましたmain.jsアドオンビルダを使用してcontentscript in - contentscriptを使用してWebページに添付された変数にアクセスする方法

私のコンテンツスクリプトでは、document.createElement()を使用して作成されたダイナミックタグの数がカウントされます。これは、document.createElement()へのフックを作成し、スクリプトタグを作成してこの関数をWebページに追加することによって行われます。私のコードは以下の通りです。

contentscriptFile:ReferenceError: count is not defined

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); 

今、私がキャッチされない例外を取得しています。

このcount変数にはどのようにアクセスできますか?

答えて

1

コンテンツスクリプトがWebページにアクセスする方法についてはthe documentationを参照してください.WebページがDOMに追加したカスタムプロパティとメソッドは表示されません。あなたのケースでは、unsafeWindowオブジェクトを介してcount変数にアクセスする必要があります:

unsafeWindow.count++; 

しかし、ドキュメントはあなたが何とか可能であればunsafeWindowを使用しないでくださいノートとして。ここで明らかになるのは、ページ内に変数countを作成しないようにすることです。だからではなく、この:

var count = 0; 

をしかし、あなたは、この変更は、Webページに見えるようにするためにunsafeWindow.document.createElementではなくdocument.createElementを交換する必要があります:

addJS_Node ("var count=0;"); 

あなただけの変数を宣言します。ここではunsafeWindowを避ける方がより複雑になるでしょう。おそらくmutation eventsを代わりに使用できますか?

+0

「var count = 0」と宣言した場合、アラートは0と表示されます – user1335906

+0

@ user1335906:正しいのですが、Webページには表示されないため、 'document.createElement'関数は呼び出されません。私の答えの最後の段落を参照してください。 –

+0

私は私が 'unsafeWindow.count ++を含まどこで – user1335906

関連する問題