我使用加载项构建器创建了一个加载项。我将内容脚本附加到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
变量?
答案 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代替?