2013-10-14 3 views
9

window.location.reload()의 효과를 모방하고 싶습니다. 콘텐츠 스크립트가 실행중인 "고립 된 세계"에 대해서만 효과를 나타냅니다. 즉, 기존 JS, 특히 콜백 및 이벤트를 모두 제거하십시오. 바인딩. 이것을 할 수있는 좋은 방법이 있습니까?Chrome 확장 프로그램 콘텐츠 실행 환경 다시로드

참고 : chrome.runtime.reload()이 작동하지 않습니다. 확장 및 배경 스크립트를 다시로드하는 효과가 있지만 사용자가 새로 고칠 때까지 기존 내용 스크립트를 다시로드하지 않습니다.

답변

4

내가 알 수있는 한, 확장 스크립트를 업데이트 할 때와 같이 콘텐츠 스크립트를 다시 삽입 할 수있는 자동 방법이 없습니다. URL이 원하는 패턴과 일치하는 모든 탭을 찾고 프로그래밍 방식으로 내용 스크립트를 다시 삽입하는 것은 chrome.tabs.executeScript을 사용하는 것입니다.

이 메서드는 콘텐츠 스크립트에서 사용하는 것과 동일한 URL 패턴에 대한 사용 권한을 추가해야합니다.

의 manifest.json :

"content_scripts":  
[ 
    { 
     "matches": [ "http://*.google.com/*" ], 
     "js": [ "content_script.js" ] 
    } 
], 
"permissions":   
[ 
    "tabs", "http://*.google.com/*" 
] 

Background.js는 :

chrome.runtime.reload(); 
chrome.tabs.query({ url: "http://*.google.com/*" }, function(tabs) 
{ 
    for(var i = 0; i < tabs.length; i++) 
    { 
     chrome.tabs.executeScript(tabs[i].id, { file: "content_script.js" }, function() {}); 
    } 
}); 
+1

문제이 기존의 문맥 그대로 둔다는 점입니다. 하나의 executeScript에서 setInterval을 시작하면 다음 executeScript 이후에도 계속 실행됩니다. –

+0

두 번째 콘텐츠 스크립트가 두 번 실행되면 이전 변수에 액세스 할 수 있으므로 모든 것을 재설정 할 수 있습니다. –

+0

@ Metoule 'chrome : // extension'에서 확장을 다시로드 한 후에 주입 할 때 이전 변수에 액세스 할 수 없습니다. 이거 테스트 해봤 니? – vaughan

관련 문제