3

Chrome 확장 프로그램에서 동일한 페이지에 여러 번 콘텐츠 스크립트를 삽입하는 데 문제가 있습니다.Chrome 확장 - 단일 페이지로드 당 여러 번 삽입되는 콘텐츠 스크립트

내가 탭의 변화, 내 "background.html"페이지에서 콘텐츠 스크립트를 주입하고 있습니다 :

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){ 
     // Do some stuff 
     chrome.tabs.executeScript(null, { code: code}, function(result){ 

... 컨텐츠 스크립트 내부 등

, 좀 CONSOLE.LOG 명령을

문제는 단일 페이지를로드 할 때 각각의 로그가 콘솔에 2-4 번 표시된다는 것입니다.

페이지 내의 iframe 때문에 이런 일이 일어나고 있다는 것은 꽤 분명합니다. 제 질문은 왜 그런가요?

"all_frames"(매니페스트의 콘텐츠 스크립트 사용 권한 배열)가 기본적으로 "false"로 설정되어 콘텐츠 스크립트가 페이지의 맨 위 프레임에만 주입되는 것을 보았습니다. 단순히 일어나지 않습니다!

왜 여러 번 주사합니까? "all_frames"를 false로 설정해야합니까?

둘째 :

인지 알 수있는 방법이 있나요 확장자가 "background.html"페이지 내에서 iframe이 또는 최고는 할 내용 스크립트를 삽입하려고하는 페이지?

나는

if(window.top === window){ console.log('whatever'); } 

을 시도 그리고 그것은 시간의 100 % 작동하지 않는 것으로 나타났습니다. 내가 코드 블록 (chrome.tabs.executeScript() 주변)의 나머지 부분 주위에 조건부를 가지고 있어도, 나는 여러 번 주입 된 콘텐츠 스크립트를보고있다. ...

어떤 아이디어 나 제안이라도 크게 환영받을 것이다. ! :)

+0

'tab' 객체에는 탭이 현재 선택되어 있는지 여부를 알 수있는'active'라는 속성이 있기 때문에'chrome.tabs.getSelected()'를 사용할 필요가 없습니다. – 10basetom

답변

3

onUpdated은 탭의 상태가 변경 될 때마다 실행됩니다. 여기에는 로딩 일 때로드가 완료되어 많은 로그 문을 설명하는 로딩이 포함됩니다. 이벤트가 발생할 때마다 변경된 내용 (변경된 URL,로드 된 항목 등)을 확인해야합니다.

+0

와우 나는 바보가된다! :) 내 코드에서'if (changeInfo.status == "complete") {}'조건부를 가지고 있지만, 영향을받은 블록이 그 바깥쪽에있다 ... 이것은 여러 플랫폼에서 여러 프로젝트를 수행 할 때 얻는 것이다./API를 동시에! : P 고마워! – delta9

관련 문제