0

스택 오버플 로용 Chrome 확장 프로그램을 작성 중이며 페이지 업데이트 (예 : 댓글/답변이 콘텐츠에 추가됨) 될 때 수표를 다시 실행해야합니다.페이지 변경 모니터링

$(document).ajaxComplete()에 가입을 시도했지만 절대로 발사 된 적이 없습니다.

DOMSubtreeModified에 바인딩하면 올바르게 업데이트 할 수 있지만 실제로는 이라고 표시됩니다. 페이지를로드 할 때 21 번 호출 할 수 있습니다 (때때로 한 번만 호출 됨). 마찬가지로 콘솔에서 jquery 선택을 수행하면 이벤트가 여러 번 다시 발생합니다.

$(setup); 

var hits = 0; 
var original_title; 

function setup() 
{ 
    original_title = document.title; 
    doWork(); 
} 

function doWork() 
{ 
    //unbind so our own changes don't cause infinite loops of the event. 
    $("#mainbar").unbind("DOMSubtreeModified", findSkeets); 

    //Debug: Add the Number of function hits to the title bar 
    hits++; 
    document.title = "(" + hits + ") " + original_title; 

    //Do Work Here 

    //Rebind to the event now that we've finished executing; 
    $("#mainbar").bind("DOMSubtreeModified", findSkeets); 
} 

페이지 변경 사항을 모니터링하는 효율적인 방법이 있습니까? SO에서 Chrome이 몇 개 멈춰있는 것을 보았습니다.이 확장으로 인한 결과 일 수 있으므로 최대한 영향을 최소화하고 싶습니다.

답변

1

DOMSubtreeModified악명 비효율적 인에 대한 (다른 이유들) 사용되지 않습니다 구식 Mutation Events API의 일부입니다. MDN에 따르면, DOM Mutation Events, "웹에서 제거되었습니다"하는 기능입니다 "를 사용하여 웹 애플리케이션이 언제든지 중단 될 수 있습니다", "낙하하는 과정에있다".

더욱 효율적인 새로운 MutationObserver API을 사용해야합니다.
합니다 (mutation-summary 라이브러리는 지금이 새로운 API에 유용한 inteface을 제공합니다.)

참조, 또한, 자세한 내용은 this answer와 유사한 쓰임새에 대한 this answer : 크롬 확장자 MutationObserver API에를 사용하여 비동기 적으로로드 된 Google 검색 결과를 감지 (및 꾸미기)합니다.

+0

당신은 내 영웅입니다! 고마워. 나는 미래에도 그것을 염두에 두어야 할 것입니다. –