2012-06-06 2 views
2

Chrome 플러그인을 개발 중입니다. 모든 태그에 클래스 이름을 주입합니다.자바 스크립트 : 데이터로드 여부를 확인하는 방법

아래로 스크롤 할 때 콘텐츠가 나중에로드되는 페이스 북과 같은 웹 페이지에 문제가 있습니다.

새로운 콘텐츠가로드되었는지 확인하는 방법이 있는지 알고 싶습니다.

는 지금까지 내가 찾을 수있는 유일한 해결책은

setInterval(function() { 

감사합니다.

답변

2

Chrome이 지원하는 DOMSubtreeModified 이벤트 (source)입니다 (자세한 내용은 this answer 참조). 코드는 다음과 비슷한 모습이 될 것입니다 Konrad Dzwinel 말했다

document.addEventListener('DOMSubtreeModified', function() { 
    $("*:not(.my_class)").addClass('my_class'); 
}, true); 
+0

감사 @kdzwinel 실제로 작동합니다. "DOMNodeInserted"를 사용하고 있습니다. 유일한 점은로드가 많이 느려지는 느낌이 들지만 확실하지 않습니다. 가능하다고 생각하십니까? – lorussian

+0

문서가 끝날 때 스크립트가 실행되도록하십시오 (또는 가능하다면 문서가 완전히로드 된 후 일정 시간이 지났음에도 불구하고). DOM을 처음 생성 할 때와 Facebook을 시작할 때 'DOMSubtreeModified'가 여러 번 실행될 가능성이 있습니다 여러 AJAX 호출을 사용하여 페이지를로드하고 작성합니다. 일반적으로 확장 기능은 자바 스크립트 무거운 웹 사이트와 웹 앱에 상당히 부담이 될 것입니다. –

1

으로, 당신은 몇 가지 Mutation Event 청취자

document.addEventListener("DOMSubtreeModified", methodToRun); 

를 사용하지만 Mutation Events가 정말 잘 길들여 할 수없는 성능 돼지를 참고 할 수 있습니다 (그들은 너무 자주 불을 뿜어 페이지를 느리게 만든다). 따라서 1 년 전부터 사용 중단되었으며 실제로 필요할 때만 사용해야합니다. 그러나 그들은 작동합니다.

크롬 확장 프로그램에서이 기능을 사용하려면 DOM Level 4의 새롭고 반짝이는 Mutation Observers을 사용할 수 있습니다 (링크를 따라 가면 많이 설명됩니다). DOMSubtreeModified이 수천 번씩 발사 된 경우 MutationObserver은 수정 사항이 모두 포함되어 액세스 할 수 있도록 한 번만 발사됩니다.

작품에 대한 (2012/06 현재) :

  • 크롬 18+ (접두사, window.WebKitMutationObserver)
  • 파이어 폭스 14+ (접두어가)
  • 웹킷 나이틀리
관련 문제