Если я правильно понимаю ваш вопрос, вам нужно установить связь между javascript страницы и собственным приложением расширения Safari.С хост-приложением можно связаться только через API safari.extension.dispatchMessage , который доступен только из внедренного сценария script.js , но не из JS страницы.
Вы можете решить это, отправив и запросив событие со страницы и зарегистрировав ответное событие.Ваша HTML-страница будет содержать скрипт:
function sendEventToInjected() {
var storeEvent = new CustomEvent('myCustomEvent', {"detail": "testData"});
document.dispatchEvent(storeEvent);
var responseEventID = 'myResponseEvent';
document.addEventListener(responseEventID, function respListener(event)
{
console.log("Got data from injected script: " + event.detail);
document.removeEventListener(responseEventID, respListener);
});
}
Ваш script.js будет перехватывать это событие, регистрируя прослушиватель событий, и затем может передавать данные в собственное хост-приложение расширения.После получения ответа собственного хоста ответное событие может быть отправлено обратно на страницу.
document.addEventListener("myCustomEvent", function(event) {
console.log("myCustomEvent:" + event.detail);
safari.extension.dispatchMessage(event.detail);
});
// Listens for messages sent from the app extension's Swift code.
safari.self.addEventListener("message", messageHandler);
function messageHandler(event)
{
var resp = {detail: "respData"};
var respEvent = new CustomEvent('myResponseEvent', resp);
document.dispatchEvent(respEvent);
}