Javascript 如何在js中保持全局变量不变
这是一个Chrome扩展JS,我想比较加载的DOM和所有加载的文件之间的DOM树结构。这里我先声明两个变量,然后它将运行到这两个侦听器中。但是txt1不会将该值保留在第一个侦听器中,无论是使用var还是窗口声明它。那么,我如何保持全球价值呢?或者我可以用其他方式绕过它Javascript 如何在js中保持全局变量不变,javascript,google-chrome-extension,Javascript,Google Chrome Extension,这是一个Chrome扩展JS,我想比较加载的DOM和所有加载的文件之间的DOM树结构。这里我先声明两个变量,然后它将运行到这两个侦听器中。但是txt1不会将该值保留在第一个侦听器中,无论是使用var还是窗口声明它。那么,我如何保持全球价值呢?或者我可以用其他方式绕过它 function tw1(){ var treeWalker = document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,{ acceptNode:
function tw1(){
var treeWalker = document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,{ acceptNode: function(node) { return NodeFilter.FILTER_ACCEPT; } },false);
var ar = new Array();
var count=0;
while(treeWalker.nextNode()) {
ar[count]=treeWalker.currentNode.nodeName;
count++;
console.log(treeWalker.currentNode.nodeName);
}
var txt="";
for (var i=0;i<count;i++)
{
txt=txt+ar[i]+i+"\t";
}
//console.log(txt);
return txt;
}
function compare(str,str0)
{
if(str.indexOf(str0) == 0&& str0.indexOf(str) == 0)
{
return 0;
}
else
{
return 1;
}
}
window.txt1="";
window.txt2="";
document.addEventListener('DOMContentLoaded', function() {
window.txt1=tw1();
}, false);
window.addEventListener('load', function() {
window.txt2=tw1();
console.log(window.txt1);
console.log(window.txt2);
if(compare(window.txt1,window.txt2)!=0)
alert("This page is possibly malicious.");
}, false);
函数tw1(){
var treeWalker=document.createTreeWalker(document,NodeFilter.SHOW_元素,{acceptNode:function(node){return NodeFilter.FILTER_ACCEPT;},false);
var ar=新数组();
var计数=0;
while(treeWalker.nextNode()){
ar[count]=treeWalker.currentNode.nodeName;
计数++;
log(treeWalker.currentNode.nodeName);
}
var txt=“”;
对于(var i=0;i来说,最简单的方法是添加一个检查条件
if(!window.txt1.length)
window.txt1=tw1();
对不起,我不明白这个问题。你说的“保留全局值”是什么意思?你想让它保持为空字符串吗?另外,你在哪里定义tw1
?@Asad tw1()是一个遍历DOM树并返回字符串的函数,我把它放在这些代码之前。在第二个侦听器中,txt1是“”,虽然第一个侦听器执行时是一个长字符串。@user1261718:发布您的所有代码。@Blender已编辑,它是整个contentscript文件。当我在第一个侦听器中选中console.log()时,为txt1分配了一个值,而当它进入第二个侦听器时,txt1返回到“”正如最初定义的那样。我检查了两个函数之间传递的一些值,例如使用window.,但它不会让第二个侦听器中的txt1在第一个侦听器中保留该值。@Sushanth--您的意思是如果(!window.txt1.length)@Sushanth我犯了一个错误,第一个tw1什么也不返回…我把第二个监听器输出中的tw1误认为是第一个监听器…要编辑它吗