2011-03-21 2 views
2

나는 이상한 행동에 직면하고 있으며 도움이 필요하다.자바 스크립트 - Firefox에서 내 콘텐츠에 대해 DOMSubtreeModified 이벤트가 실행되지 않습니다!

페이지의 내용이 수정되었는지 여부를 알아 내려고 할 때 상황이 발생한다. 나는 내가 또한 document.DOMSubtreeModified와 window.DOMSubtreeModified을 듣고 시도

gBrowser.tabContainer.addEventListener("DOMSubtreeModified", function (e) { this.foo(e); }, false); 

을 사용하여이 작업을 수행.

그러나 때로는 기본 \ 선택한 문서가 내게 관련없는 무언가입니다. 어쩌면 일부 IFrame 또는 상업용 광고가 내장되어 있거나 내용이 수정 될 수 있습니다. 콘텐츠가 수정되지만 브라우저를 보았을 때 DOMSubtreeModified는 실제로 수정되지 않은 문서를 청취하기 때문에 시작되지 않습니다 ...

내 문제는 어디에 있습니까? DOMSubtreeModified와 같은 콘텐츠 수정을 인식하여 관련 콘텐츠를 식별하고 처리 할 수 ​​있도록 모든 문서에 대해 실행되는 이벤트를 만들어야합니까?

고마워,

Nili

명시 적으로 관심있는 요소 내의 각 <iframe> 요소에 대한 문서 객체에 리스너를 추가하여 모든 DOM 수정을 수신 할 수

답변

2

:

function listenForDomModified(node, listener) { 
    node.addEventListener("DOMSubtreeModified", listener, false); 
    var iframes = node.getElementsByTagName("iframe"); 
    for (var i = 0, len = iframes.length, doc; i < len; ++i) { 
     // Catch and ignore errors caused by iframes from other domains 
     try { 
      doc = iframes[i].contentDocument || iframes[i].contentWindow.document; 
      doc.addEventListener("DOMSubtreeModified", listener, false); 
     } catch (ex) {} 
    } 
} 

listenForDomModified(gBrowser.tabContainer); 

Opera에서 DOMSubtreeModified 이벤트가 전혀 실행되지 않으므로 해당 브라우저에서 코드가 작동하지 않습니다.

0
   for FF 2, Safari, Opera 9.6+ 

       doc.addEventListener('DOMNodeInserted', callback, false); 
       doc.addEventListener('DOMNodeRemoved', callback, false);