2013-05-20 38 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