1

Chrome 확장 프로그램을 구축 중이며 탭에 자바 스크립트 코드를 주입하고 실행하려고합니다. 예를 들어탭에서 URL을 변경하거나 다시로드 할 때 chrome.tabs.executeScript 사용

:이 간단한 스크립트를 입력하고 "테스트"를 검색하고 클릭해야 google.com에서 실행되는 것을 의미하고

$('#gbqfq').val('test'); 
$("#gbqf").submit(); 

$('#rso > div.srg > li:nth-child(1) > div > h3 > a').click(); 

다음 code_중인 변수로

chrome.tabs.query({active: true, lastFocusedWindow: true}, function(selectedTab) { 
    chrome.tabs.executeScript(selectedTab[0].id, {code: code_}); 
}); 

첫 번째 결과.

요청을 제출하면 탭에서 URL이 변경되어 다른 페이지가로드됩니다. 그리고 페이지가로드 될 때 chrome.tabs.executeScript에 의해 주입 된 모든 스크립트가 사라지는 것으로 보입니다.

동일한 탭의 다른 페이지를 통해 단일 스크립트를 실행하는 방법이 있습니까?

내 확장 프로그램은 사용자가 자신의 스크립트를 실행할 수 있도록 허용해야하기 때문에 탭이 다시로드 될 것으로 예상되는 스크립트의 시점 (몇 가지 chrome.tabs.executeScript 호출을 사용하기 위해)을 미리 아는 것은 복잡합니다. . 탭 멀리 탐색 한 후

{ 
    "manifest_version": 2, 

    ... 

    "options_page": "options.html", 

    "permissions": [ 
     "storage", 
     "unlimitedStorage", 
     "tabs", 
     "windows", 
     "http://*/*", 
     "https://*/*" 
    ], 

    "browser_action": 
    { 
     "default_popup": "popup.html" 
    } 
} 

답변

1

아니, 당신이 동일한 스크립트 실행할 수 없습니다 : 여기

은 (어떤 배경, 아니 content_scripts) 난 단지 팝업을 사용하고, 내 확장의 manifest.json을하지 않습니다 스크립트가 살아있는 JavaScript 문맥이 파괴되기 때문이다.

페이지가로드 된 후 스크립트를 다시 삽입해야합니다. 다음 줄을 따라 뭔가를하고 싶을 것입니다 :

  1. 제출 스크립트를 주입하고 탭 ID를 저장하십시오.
  2. 제출을 시작하십시오.
  3. chrome.tabs.onUpdated을 (를) 위의 탭 ID 및 상태 "complete" (으)로 필터링 함.
  4. URL이 예상 한 URL인지 확인한 다음 데이터 수집 스크립트를 주입하십시오.
+0

'onUpdated'이 (가) 실행될 때 스크립트가 어떤 지점에 있는지 알 수있는 방법이 있습니까? 앞에서 말했듯이 스크립트에서 탐색이 예상되는 위치를 알 수 없습니다. – Seeven

+0

'onUpdated' 시점에서 (content) 스크립트는 더 이상 존재하지 않습니다. – Xan

+0

전체적으로, 임의의 사용자 코드를 해석하는 경우 귀하의 질문은 매우 광범위하게 보입니다. – Xan

관련 문제