0

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 및 기타 리디렉션 사이트로 이동하여 사용자를 리디렉션했습니다. 확장 프로그램을 선택하지 않는 이유는 무엇입니까?

은 (그리고 그래, 내 manifest.json을 파일에서 내 권한에서 "WebRequest 클래스"를 뒀다.)

사전에 감사, 당신은 다른 코드가 필요하면 알려 주시기 바랍니다.

편집 : @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>"]}); 
+1

'console.log'를 실행하지 않는 이유를 즉시 알 수는 없지만 핸들러에 대한 서명이 잘못되었습니다 - 이벤트가 하나의'details' 객체를 반환합니다. 올바른 콘솔을보고 있습니까? 'tabs.sendMessage'는 타이밍이 주어진다면 무의미 할 것입니다 (탭은 내용 스크립트를 언로드하거나 아직 새 탭을로드하지 않았습니다). – Xan

+1

매니페스트 파일에서 호스트 권한을 선언하셨습니까? –

+0

^이것은 대답 일 수 있습니다. ''webRequest ''뿐만 아니라 캡처 한 URL에 대한 호스트 권한이 필요합니다. – Xan

답변

2

: 여기에 새로운 코드입니다. 그런 다음 details.url (또는 새 URL이 필요한 경우 details.redirectUrl)과 details.tabId을 사용하여 url 및 tabId에 액세스합니다. 또한 탭 내의 프레임이 리디렉션되어 이벤트가 두 번 이상 발생할 수 있습니다. 코드는 메인 프레임이 같은 검사를 추가해야 리디렉션하는 경우에만 실행하는 경우 또한

if (details.frameId == 0){ 
     //Your code here 
} 

당신이 addListener 함수의 인수에 {urls: ["<all_urls>"]}을 왜, 나는 확실하지 않다. 유일한 인수는 콜백입니다. 이 밖으로 일을 알려줘

chrome.webRequest.onBeforeRedirect.addListener(function (details) { 
    if(details.frameId == 0){   
    console.log("This is a redirect"); 
    chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){}); 
    } 
}); 

: 그래서, 내가 좋아하는 뭔가를 작성합니다.

+0

여전히 작동하지 않습니다. 콘솔을 열고 "로그 보존"옵션을 켰지 만 wikipedia.com 또는 google.net으로 이동하면 표준 "navigated to wikipedia.org/" 또는 'google.com으로 이동'메시지가 표시됩니다. –

+0

신경 쓰지 마세요, 편집 부탁드립니다. –

+0

아마도 다른 이벤트를 시도해야 할 것입니다. 아마도'chrome.webRequest.onCompleted()'와 같은 것입니다. –

관련 문제