2013-05-20 2 views
0

Chrome 확장 JS입니다.로드 된 DOM과로드 된 모든 파일 사이의 DOM 트리 구조를 비교하고 싶습니다. 두 변수를 먼저 선언 한 다음이 두 수신기에 실행합니다. 그러나 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은 ""이지만 첫 번째 리스너가 실행될 때 긴 문자열입니다. – user1261718

+0

@ user1261718 : 모든 코드 게시 * – Blender

답변

1

간단한은

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

이 작동하지 않습니다. txt1은 긴 문자열이 아니라 ""입니다. – user1261718

+0

그것이 작동하지 않는다는 것은 무엇을 의미합니까? –

+0

첫 번째 청취자에서 console.log()를 검사하면 txt1에 값이 할당되고 두 번째 청취자가 들어 오면 txt1은 처음에 정의 된대로 ""로 되돌아갑니다. 나는 창을 사용하는 것과 같이 2 가지 fuctions 사이에서 가치있는 것을 확인했다. ,하지만 두 번째 리스너에서 txt1이 첫 번째 리스너에서 값을 유지하도록 허용하지 않습니다. – user1261718

관련 문제