Firefox addon 如何在中使用contentscript访问附加到网页的变量-使用加载项生成器访问contentscript

Firefox addon 如何在中使用contentscript访问附加到网页的变量-使用加载项生成器访问contentscript,firefox-addon,firefox-addon-sdk,content-script,Firefox Addon,Firefox Addon Sdk,Content Script,我使用插件生成器创建了一个插件。我在main.js 我的内容脚本统计使用document.createElement()创建的动态标记的数量。这是通过创建document.createElement()的钩子实现的,并通过创建脚本标记将此函数添加到网页中。我的代码如下 contentscriptFile: addJS_节点(“var count=0;”); 函数LogDocCreateElement() { var oldDocumentCreateElement=document.create

我使用插件生成器创建了一个插件。我在
main.js

我的内容脚本统计使用
document.createElement()
创建的动态标记的数量。这是通过创建document.createElement()的钩子实现的,并通过创建脚本标记将此函数添加到网页中。我的代码如下

contentscriptFile:

addJS_节点(“var count=0;”);
函数LogDocCreateElement()
{
var oldDocumentCreateElement=document.createElement;
document.createElement=函数(标记名)
{
var elem=oldDocumentCreateElement.apply(文档、参数);
log(“动态创建一个(n)”,标记名);
计数++;
返回元素;
} 
}
addJS_节点(null,null,LogDocCreateElement);
函数addJS_节点(文本、s_URL、函数名){
var D=文件;
var scriptNode=D.createElement('script');
scriptNode.type=“text/javascript”;
如果(text)scriptNode.textContent=text;
如果(s_URL)scriptNode.src=s_URL;
if(funcToRun)scriptNode.textContent='('+funcToRun.toString()+')()';
var targ=D.getElementsByTagName('head')[0]| | D.body | | D.documentElement;
target.appendChild(脚本节点);
}
addEventListener(“加载”,函数(){alert(count)},false);
现在我得到了未捕获的异常:
ReferenceError:count未定义

如何访问此
count
变量?

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

unsafeWindow.count++;
但是,如文档所述,如果可能,您应该避免使用
unsafeWindow
。这里显而易见的做法是避免在页面中创建
count
变量。因此,与此相反:

addJS_节点(“var count=0;”);
您只需声明变量:

var计数=0;
但是您需要替换
unsafeWindow.document.createElement
,而不是
document.createElement
,以便此更改对网页可见。避免
unsafeWindow
这里会更加复杂,也许您可以改用它?

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

unsafeWindow.count++;
但是,如文档所述,如果可能,您应该避免使用
unsafeWindow
。这里显而易见的做法是避免在页面中创建
count
变量。因此,与此相反:

addJS_节点(“var count=0;”);
您只需声明变量:

var计数=0;

但是您需要替换
unsafeWindow.document.createElement
,而不是
document.createElement
,以便此更改对网页可见。避免
unsafeWindow
这里会更加复杂,也许你可以改用它?

但是如果我声明为
var count=0
@user1335906:这是正确的-你的
文档。createElement
函数永远不会被调用,因为网页没有看到它。请参阅我答案的最后一段。我应该在哪里更改document.createElement,无论是在
LogDocCreateElement()
还是
addJSNOde()
中,对不起,我没有收到您可以指定我应该在哪里修改包含的
unsafeWindow.count++在我的代码中,但我得到“未定义unsafeWindow”错误。如何解决此问题?如果我声明为
var count=0
@user1335906,则警报将显示0:这是正确的-您的
文档。createElement
函数从未调用,因为网页没有看到它。请参阅我答案的最后一段。我应该在哪里更改document.createElement,无论是在
LogDocCreateElement()
还是
addJSNOde()
中,对不起,我没有收到您可以指定我应该在哪里修改包含的
unsafeWindow.count++在我的代码中,但我得到“未定义unsafeWindow”错误。我该如何解决这个问题