如何使用附加构建器中的内容脚本使用内容脚本访问附加到网页的变量

时间:2012-05-03 06:56:15

标签: firefox-addon firefox-addon-sdk content-script

我使用加载项构建器创建了一个加载项。我将内容脚本附加到pageMod

中的main.js

我的内容脚本计算使用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 个答案:

答案 0 :(得分:1)

请参阅the documentation内容脚本如何访问网页 - 他们没有看到网页添加到DOM的任何自定义属性和方法。在您的情况下,您需要通过count对象访问unsafeWindow变量:

unsafeWindow.count++;

但是,正如文档中指出的那样,如果可能的话,您应该避免使用unsafeWindow。这里明显的做法是避免在页面中完全创建count变量。所以不要这样:

addJS_Node ("var count=0;");

您只需声明变量:

var count = 0;

但是,您需要替换unsafeWindow.document.createElement而不是document.createElement才能使此更改对网页可见。避免unsafeWindow这里会更复杂,也许您可​​以使用mutation events代替?