作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在旧版扩展中,可以迭代 safari.application.activeBrowserWindow.tabs
以向所有注册了该扩展的标签页发送消息。
新的 Safari 应用程序扩展是否有任何可用的等效项?
我一直在浏览文档,但没有找到任何关于如何实现这一非常基本的事情的提示。
一个可怕的解决方法是让所有选项卡 ping Swift 背景,但实际上这是一个如此基本的事情,它似乎很荒谬,它不可用或不在文档中,我是不是错过了什么?
我还尝试保留所有“页面”实例的弱映射,如“messageReceived”处理程序所见,希望 SFSafariPage 引用将保留到选项卡关闭,但它们几乎丢失了立即表明它们是比实际 Safari 页面更多的消息 channel 。
最佳答案
接下来的方式应该是:在 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)
}
它看起来很老套,但仍然可行。享受:)
关于swift - Safari 应用程序扩展 : broadcast a message to all tabs from swift background process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53319964/
我是一名优秀的程序员,十分优秀!