2013-05-20 39 views
0

这是一个Chrome扩展JS,我想比较DOM树结构之间DOM加载所有这些文件loaded.Here我声明两个变量第一,然后它会运行到这2名听众。但txt1不会将值保留在第一个侦听器中,无论使用var还是window声明。那么我怎样才能保持全球价值呢?或者我可以用其他方式绕过它吗?如何保持全局变量不变,JS

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); 
+0

对不起,我不明白的问题。 “保持全球价值”是什么意思?你想让它保持空弦吗?另外,你在哪里定义'tw1'? –

+0

@Asad tw1()是遍历DOM树的函数并返回一个String,我把它放在这些代码之前。在第二个监听器中,txt1是“”,尽管当第一个监听器执行时它是一个很长的String。 – user1261718

+0

@ user1261718:发布*全部*您的代码。 – Blender

回答

1

简单的方法是增加一个检查条件

if(!window.txt1.length) 
    window.txt1=tw1(); 
+0

不起作用,txt1是“”而不是一个长字符串。 – user1261718

+0

你的意思是什么不起作用? –

+0

当我在第一个侦听器中检查console.log()时,txt1被分配一个值,而当它进入第二个侦听器时,txt1会首先返回到“”。我检查了2个功能之间的一些值,比如使用窗口。 ,但它不会让第二个侦听器中的txt1在第一个侦听器中保留该值。 – user1261718