1

我使用附加组件构建器创建了一个附加组件。pageMod我在in 中附加了一个内容脚本main.js

我的内容脚本计算使用创建的动态标签的数量document.createElement()。这是通过创建一个到 document.createElement() 的钩子并通过创建脚本标签将此函数添加到网页来完成的。我的代码如下。

内容脚本文件:

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

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

unsafeWindow.count++;

但是,正如文档所述,unsafeWindow如果可能,您应该避免使用。这里明显的做法是完全避免count在页面中创建变量。所以代替这个:

addJS_Node ("var count=0;");

您只需声明变量:

var count = 0;

但是您需要替换unsafeWindow.document.createElement而不是document.createElement为了使此更改对网页可见。在这里避免unsafeWindow会更复杂,也许你可以使用突变事件来代替?

于 2012-05-03T07:14:38.173 回答