Как связаться между приложением Safari и HTML-страницей, загруженной из папки ресурсов расширения приложения Safari - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать простое расширение для приложения safari.На about:blank я загружаю html-страницу из папки ресурсов расширения.Ниже приведен код для этого.

//script.js - injected script
if(window.location.href=="about:blank"){
    window.location.href = safari.extension.baseURI + "page.html";
}

Мне нужна связь между этой загруженной страницей и приложением для сафари.Очевидно, внедренный скрипт script.js недоступен на загруженной html-странице .

Я пытался связать script.js со встроенной html-страницей, но сам объект safari недоступен для safari.extension.dispatchMessage или safari.self.addEventListener.

РЕДАКТИРОВАТЬ:
с этим (внедренный скрипт script.js недоступен на загруженной html-странице / вкладке, на которой загружена страница) Я имею в виду, что при открытии веб-инспектора на вкладке ресурсовмы не можем видеть extension scripts

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Вы не можете "переместить" страницу в safari-extensions: // url, но получить HTML-код для отображения из Расширения приложения Safari (с помощью обмена сообщениями), а затем вставить код на пустую страницу about :.Результат будет таким же, за исключением того, что URL страницы останется примерно пустым

0 голосов
/ 26 января 2019

Это похоже на ошибку в Apple.Я подал один с BugReporter.

0 голосов
/ 26 сентября 2018

Если я правильно понимаю ваш вопрос, вам нужно установить связь между 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...