콘텐츠 스크립트에서 메시지를 수신하면 새로운 탭을 만들고 동적으로 열리는 페이지를 채우고 싶습니다. 지금은 새로 만든 페이지를 돌리려고합니다. 빨간).Chrome 확장 프로그램 : 탭을 만든 다음 콘텐츠 스크립트 삽입하기
eventPage.js :
// ... code that injects another content script, works fine
// Problem code...
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse)
{
chrome.tabs.create({url: chrome.extension.getURL("blankpage.html")},
turnTabRed);
});
function turnTabRed(tab)
{
chrome.tabs.executeScript(
tab.id,
{code: 'document.body.style.backgroundColor="red"'}
);
}
이 성공적으로 새 탭 (일부 텍스트 단지 HTML 페이지입니다)로드 blankpage.html
벌금을 만들지 만, 배경 색상을 빨간색으로 칠하는 데 실패합니다. 많은 곳에서 console.log()
문을 삽입하고 디버거를 속이고 난 후에 tab.id
이 실제로 새로 생성 된 탭의 ID라는 것을 확인했습니다. 콘솔에서 document.body.style.backgroundColor="red"
을 호출하면 새 탭의 배경이 빨간색으로 변합니다. . 내가 turnTabRed
의 몸에
(*)
chrome.tabs.query(
{}, function (tabArr) { for (var i = 0; tabArr[i]; i++)
console.log(tabArr[i].title); });
을 추가 한 경우 새 탭의 제목은 스크립트가 너무 일찍 주입되는 것을 제안 콘솔로 인쇄되지 않을 것입니다 것으로 나타났습니다 그래서 나는 setTimeout
으로 주입을 지연 시도하고 실패 할 때, 나는 상태 완성 이벤트를 수신 시도 :
function turnTabRed(tab)
{
chrome.tabs.onUpdated.addListener(
function(tabUpdatedId, changeInfo, tabUpdated)
{
if (tabUpdatedId == tab.id && changeInfo.status &&
changeInfo.status == 'complete')
chrome.tabs.executeScript(
tabUpdatedId,
{code: 'document.body.style.backgroundColor="red"'});
});
}
도 실패한다. setTimeout
으로 대기 한 후 (*)를 호출하면 다른 탭과 함께 새 탭의 제목이 인쇄됩니다.
무엇이 잘못 되었나요? 새 탭을 만들고 HTML 페이지를로드 한 다음 배경을 빨간색으로 바꾸려면 어떻게합니까?
콘솔 반환'크롬 확장에'chrome.extension.getURL ("blankpage.html")'실행 : ///blankpage.html' (안'크롬 : //. ..') 및 https://developer.chrome.com/extensions/match_patterns.html은 예제 패턴으로'chrome-extension : // */*'을 사용합니다. 그러나 그 패턴을 '사용 권한'아래에있는 매니페스트에 넣으면 크롬에서 ''chrome-extension : // */* '권한을 알 수 없거나 URL 패턴이 잘못되었습니다.'라는 경고가 표시됩니다. 'content_scripts'의'matches' 속성 아래에 넣으면 확장을로드 할 때 오류가 발생합니다. 이것을 명확히하는 몇 가지 문서를 가리킬 수 있습니까? –
asnr
여전히'blankpage.html'에 삽입 할 수 없지만 'blankpage.js' (HTML 페이지의 JavaScript)에서 확장 페이지로 메시지를 전달하여'blankpage.html'을 동적으로 수정할 수 있습니다 (이것은 my 'chrome.runtime.sendMessage()'를 사용하여'chrome.runtime.sendMessage (원 목표)를 생성한다. 예 :'chrome.runtime.sendMessage ({}, function (response) {document.body.style.backgroundcolor = "red";});'. 답을 수정하면 해결 방법으로 제시되므로 기꺼이 받아 들일 것입니다. – asnr
Ahh interesting ...'blankpage.js'는'blankpage.html'의 html에서 링크 된 javascript 파일입니까? 아니면 콘텐츠 스크립트? 콘텐츠 스크립트를'chrome : // * '페이지에 삽입 할 수 있다면 탭 생성의 콜백에서 새 페이지의 내용 스크립트로 전달되는 메시지가 실행 가능한 해결책일까요? 이것은 꽤 흥미로운 문제입니다 ... 나는 기회가 생길 때 좀 더 많은 해결책을 찾아 볼 것입니다. :) – berrberr