0

这是一个 Chrome 扩展 JS,我想比较加载的 DOM 和加载的所有这些文件之间的 DOM 树结构。这里我先声明两个变量,然后它将运行到这两个监听器中。但是 txt1 不会保留第一个监听器中的值,无论是用 var 还是 window 声明它。那么如何保持全局值呢?或者我可以通过其他方式绕过它吗?

    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);
4

1 回答 1

1

最简单的是添加检查条件

if(!window.txt1.length)
    window.txt1=tw1();
于 2013-05-20T23:11:08.953 回答