1

アドオンビルダーを使用してアドオンを作成しました。にコンテンツスクリプトを添付しpageModましたmain.js

私のコンテンツスクリプトは、を使用して作成された動的タグの数をカウントしdocument.createElement()ます。これは、document.createElement()へのフックを作成し、スクリプトタグを作成してこの関数をWebページに追加することで実行されます。私のコードは次のとおりです。

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この変数にアクセスするにはどうすればよいですか?

4

1 に答える 1

1

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

unsafeWindow.count++;

ただし、ドキュメントに記載されているように、unsafeWindow可能な場合は使用を避ける必要があります。ここでの明らかな行動方針countは、ページ内で変数を作成しないようにすることです。したがって、これの代わりに:

addJS_Node ("var count=0;");

変数を宣言するだけです:

var count = 0;

ただし、この変更が Web ページに表示されるようにするためでunsafeWindow.document.createElementはなく、置き換える必要があります。document.createElementここで回避するのはかなりunsafeWindow複雑になります。代わりにミューテーション イベントを使用できますか?

于 2012-05-03T07:14:38.173 に答える