Google 크롬 확장 프로그램을 개발 중이며 특정 작업을 수행 할 수 있도록 리디렉션을 감지해야합니다 (이 작업은 관련이 없으며이 질문은 단순히 리디렉션과 관련이 있습니다).Chrome API의 onBeforeRedirect가 제대로 작동하지 않습니까?
chrome.webRequest.onBeforeRedirect.addListener(function (url, tabId) {
console.log("This is a redirect");
chrome.tabs.sendMessage(tabId, {"message": url}, function(response){});
}, {urls: ["<all_urls>"]});
그러나, console.log
또는 sendMessage
방법도 호출지고 : 지금까지 내 background.js에서이 코드가 있습니다. wikipedia.com, google.net 및 기타 리디렉션 사이트로 이동하여 사용자를 리디렉션했습니다. 확장 프로그램을 선택하지 않는 이유는 무엇입니까?
사전에 감사, 당신은 다른 코드가 필요하면 알려 주시기 바랍니다.
편집 : @ze 덕분에 지금 작동하지만 지금은 조금만 작동합니다. 도입니다. 다시 말해, 페이지 당 여러 번 시작되기 시작합니다. 크롬 검색 창에 리디렉션 사이트의 URL을 입력하기 시작하면 리디렉션 메시지도 표시됩니다. 내가 실제로 리디렉션 사이트로 이동하기 위해 입력을 밀어 넣을 때 (그리고 아직 입력하는 동안이 아니라) 한 번만 발동 할 수 있습니까? details
: here 콜백이 하나 개의 인수를 가져야한다고 말한다 동안 onBeforeRedirect는 두 개의 인수를 가지고 내가 당신의 콜백을 볼 수있는에서
chrome.webRequest.onBeforeRedirect.addListener(function (details) {
if(details.frameId === 0){
alert("This is a redirect.");
// chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){});
}
}, {urls: ["<all_urls>"]});
'console.log'를 실행하지 않는 이유를 즉시 알 수는 없지만 핸들러에 대한 서명이 잘못되었습니다 - 이벤트가 하나의'details' 객체를 반환합니다. 올바른 콘솔을보고 있습니까? 'tabs.sendMessage'는 타이밍이 주어진다면 무의미 할 것입니다 (탭은 내용 스크립트를 언로드하거나 아직 새 탭을로드하지 않았습니다). – Xan
매니페스트 파일에서 호스트 권한을 선언하셨습니까? –
^이것은 대답 일 수 있습니다. ''webRequest ''뿐만 아니라 캡처 한 URL에 대한 호스트 권한이 필요합니다. – Xan