Расширения приложения Safari: рассылка сообщения на все вкладки из быстрого фонового процесса - PullRequest
0 голосов
/ 15 ноября 2018

В устаревшем расширении можно было выполнить итерации по safari.application.activeBrowserWindow.tabs, чтобы отправить сообщение всем вкладкам, зарегистрированным с расширением.

Есть ли какой-либо эквивалент, доступный с новыми расширениями приложения Safari?

Я прошел через документы, но не нашел никаких подсказок о том, как достичь этой самой простой вещи.

Ужасным обходным решением было бы заставить все вкладки пропинговать фон Swift, но на самом деле это такая базовая вещь, что кажется абсурдным, что она недоступна или не покрыта документами, я что-то упустил?

Я также пытался сохранить слабую карту всех экземпляров «страницы», как это видно из обработчика «messageReceived», в надежде, что ссылка SFSafariPage будет сохраняться до тех пор, пока вкладка не будет закрыта, но вместо этого они почти сразу теряются. , предполагая, что они являются больше каналов сообщений, чем настоящие страницы Safari.

1 Ответ

0 голосов
/ 20 ноября 2018

путь должен быть следующим: в injected.js вы отправляете сообщение в app-ext, например,

document.addEventListener("DOMContentLoaded", function (event) {
    safari.extension.dispatchMessage('REGISTER_PAGE')
})

И в app-ext обработайте это как-то так:

var pages: [SFSafariPage] = []

class SafariExtensionHandler: SFSafariExtensionHandler {

    override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
        switch messageName {
        case "REGISTER_PAGE":
            if !pages.contains(page) {
                pages.append(page)
            }
        default:
            return
        }
    }

}

Что ж, тогда вы можете отправить сообщение всем открытым страницам во время выполнения, например:

for p in pages {
    p.dispatchMessageToScript(withName: "message name", userInfo: userInfo)
}

Это выглядит неприлично, но все же работоспособно. Наслаждайтесь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...