2012-06-18 4 views
3

크롬 확장 프로그램을 사용하여 사이트에서 일부 내용을 수정합니다 (댓글 편집).아약스 변경시 Chrome 확장 프로그램 실행 콘텐츠 스크립트

최근 사이트 변경 (사이트가 내 것이 아닙니다) - 주석 블록은 (전체 페이지를 다시로드하는 간단한 게시물 요청 이전에) ajax를 사용하여로드됩니다.

콘텐츠 스크립트가 작동하지만 처음 페이지를로드 할 때 다음 페이지로 이동하면 페이지 # 2라고 말하면서 주석이 ajax를 사용하여 추가되고 확장 스크립트가 더 이상 실행되지 않습니다. 따라서 댓글은 원하는 방식으로 변경되지 않습니다.

페이지 변경 DOM을 수신하고 확장 스크립트를 다시 적용하는 간단한 방법이 있습니까? 매니페스트 파일에서

나는이 :

{ 
    "name": "Name", 
    "version": "1.0", 
    "description": "Description", 
    "icons": {"16":"16.png", 
      "48":"48.png", 
      "32":"32.png", 
      "128":"128.png"}, 
    "browser_action": { 
    "default_title": "Default title", 
    "default_icon": "48.png", 
    "popup": "popup.html" 
    }, 
    "permissions": [ 
    "tabs", 
    "http://www.site.com/*", 
    "notifications", 
    "unlimitedStorage" 
    ], 

    "options_page": "options.html", 
    "background_page": "background.html", 

    "content_scripts": [ 
       { 
        "matches": ["http://www.site.com/*","https://www.site.com/*"], 
        "js": ["jquery-1.7.1.min.js","content.js"], 
        "run_at": "document_end" 
       }] 
} 

답변

8

당신은 DOMSubtreeModified라는 이벤트 리스너를 추가 할 수 있습니다. 함수를 바인딩하고 변경이있을 때마다 호출됩니다. jQuery를에

:

$('#ContentContainer').bind('DOMSubtreeModified',modifyComments); 

UPDATE : 경우 이벤트가 여러 번 발사됩니다

, 처음 동안 바인딩 이벤트를 삭제하고 특정 시간 종료 후에는 호출 할 수 있습니다 modifyComments를 호출하고 이벤트를 리 바인드하십시오.

function DOMModificationHandler(){ 
    $(this).unbind('DOMSubtreeModified.event1'); 
    setTimeout(function(){ 
     modifyComments(); 
     $('#ContentContainer').bind('DOMSubtreeModified.event1',DOMModificationHandler); 
    },1000); 
} 

//after document-load 
$('#ContentContainer').bind('DOMSubtreeModified.event1',DOMModificationHandler); 
+0

접미사 '.event1'은 무엇인가요? –

+0

아, 내 다른 스크립트에서 코드를 붙여 넣기 전에 [이벤트 네임 스페이스] (http://www.learningjquery.com/2007/09/namespace-your-events)를 삭제하는 것을 잊었습니다. – SuperSaiyan

+0

$ ("#ContentContainer"). bind ('DOMSubtreeModified', function() { alert ('changed'); }); 한 번로드하는 동안 "변경된"너무 많은 시간을 트리거합니다. - 모든 자식 요소가 하나씩 추가되고, 이벤트를 매번 triggeres하는 것 같습니다 .- 주석을 편집하기위한 스크립트를 실행하면 리소스를 낭비하지 않는 좋은 방법입니다. 해당 요소가 변경되었는지 확인하고 프로세스에서 변경하지 않는 방법이 있습니까? – Volder

관련 문제