2010-02-23 5 views
15

나는 팝업과 배경 페이지가있는 Google 크롬 확장 프로그램을 작성하고 있습니다. 팝업은 배경이 생성하는 특정 이벤트를 구독하며, 팝업이 사라지면 해당 이벤트의 구독을 취소하고 싶습니다. 그러나 팝업에서 생성되는 onbeforeunload 또는 onunload 이벤트가 표시되지 않습니다. 이 사건들이 해고 되었습니까? 그렇지 않다면 팝업 캡처 방법에 대한 아이디어가 있습니까?Google 크롬 확장에 popup.html에 대한 onbeforeunload 이벤트 트리거가 있습니까?

+1

나는이 정확한 질문을 가지고있다. 혹시 답을 찾았습니까? –

답변

1

비슷한 문제가있었습니다. 필자의 경우 팝업 페이지에 있던 요소에 초점을 맞추기로했습니다. 그래서 팝업이 닫히면 요소가 포커스를 잃고 blur 이벤트를 잡을 수 있습니다.

+0

이 트릭은 나에게 효과적이지 않습니다. 정말로 희망적이었습니다.하지만 아무 것도 시도하지 않았습니다. –

30

"beforeunload"는 브라우저 동작 팝업으로 실행되는 이 아니며입니다. 날 믿어, 나는 노력했다. 그러나 "언로드"가 올바르게 시작되어야합니다.

사실, 비슷한 시스템을 사용하여 addEventListener를 사용하여 이벤트를 첨부 할 수 있으며 언로드 이벤트가 발생하면 자동으로 정리됩니다.

약간의 팁이 있습니다. 분명히 언로드 이벤트가 발생할 때까지는 이미 너무 늦었습니다. console.log을 사용할 수 없습니다. 그러나, 당신은이 작업을 수행 할 수 있습니다

var background = chrome.extension.getBackgroundPage(); 

addEventListener("unload", function (event) { 
    background.console.log(event.type); 
}, true); 

위의 코드를 사용하면 unload 이벤트가 올바르게 해고되는 것을 보여 주어야 배경 페이지의 콘솔을 열 수 있습니다.

+0

배경 콘솔 팁 주셔서 감사합니다! 매우 유용합니다! –

+0

@AlexStack 편집을 되돌 렸습니다. 'chrome.runtime.getBackgroundPage'는 동일하지 않습니다 - 비동기입니다. – Xan

+0

최소한 이벤트 페이지에서'chrome.runtime.getBackgroundPage()'를 사용하여 백그라운드 페이지를 호출하여 어떤 것을 기록하면'unload' 이벤트에 대해이 작업을 볼 수 없습니다. – jdunning

0

내선 번호에서 배경 페이지 대신 을 사용하도록 전환 한 경우에는 해당 페이지에 대한 액세스 권한을 얻으려면 chrome.runtime.getBackgroundPage()을 호출해야합니다.이 기능은 백그라운드 페이지 참조와 함께 다시 호출됩니다.

그러나이 같은 onbeforeunload 처리기에서 배경 페이지를 얻기 위해 시도하는 경우 :

document.addEventListener("beforeunload", function() { 
    chrome.runtime.getBackgroundPage(function(backgroundPage) { 
     backgroundPage.log("unloading"); 
    }); 
}); 

콜백 페이지가 언로드하기 전에 log() 호출이되지 않습니다 있도록 화재하지 않는 것 같습니다.

위의 설명에서 Pauan은 chrome.extension.getBackgroundPage()을 사용하여 페이지를 가져올 것을 제안했습니다. 내가 작동하도록 할 수있는 유일한 방법은 addEventListener()으로 핸들러를 생성하는 것이 아니 었습니다. 대신에 나는 오래된 학교를 가서 window에 직접 핸들러를 설정했다 : 마지막으로 배경 페이지에 침입

window.onbeforeunload = function() { 
    chrome.extension.getBackgroundPage().log("unloading"); 
}; 

.