내가 다음에 설명 할 추상화 기능에 safari.self.tab.dispatchMessage
호출을 래핑하여 당신의 팝 오버에 메시지 기반 콘텐츠 스크립트 코드를 재사용 달성하기위한 간단한 방법 ...
하지만 먼저, 당신은 할 필요가 이 같은 모든 메시지를 처리하는 글로벌 페이지에서 하나의 이름 핸들러 함수를 알고 있어야합니다 :
각 다른 메시지에 대해 별도의 핸들러를 가지고, 또는 익명 함수를 사용하는 경우,이 방법은 경우
function handleMessage(evt) {
switch (evt.name) {
case 'Message1':
// do something with evt.message
break;
case 'Message2':
// do something else with evt.message
break;
}
}
safari.application.addEventListener('message', handleMessage, false);
작동하지.
지금, 당신의 팝 오버 및 콘텐츠 스크립트에가는 래퍼 함수는 매우 간단합니다 : 다음
function tellGlobalPage(msgName, msgData) {
if (safari.self instanceof SafariExtensionPopover) {
// this script is running in a popover
var fakeMsgEvt = { name: msgName, message: msgData };
safari.extension.globalPage.contentWindow.handleMessage(fakeMsgEvt);
} else {
// this script is a content script
safari.self.tab.dispatchMessage(msgName, msgData);
}
}
그리고이 단순한 접근 방식은 취급하지 않습니다 유의하시기 바랍니다 tellGlobalPage(name, data).
를 사용하는 대신 safari.self.tab.dispatchMessage(name, data),
의 라운드 트립 메시징에서 popover 또는 content 스크립트가 글로벌 페이지로 메시지를 보내고 글로벌 페이지가 다른 메시지로 응답합니다. 이를 처리 할 수있는 다른 접근법이 있습니다.
네가 맞다. 브라우저 아키텍처의 특정 측면이 약간 다르다하더라도 다르다. –