黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述safari app extensions:从swift后台进程向所有选项卡广播消息相关的知识,希望能为你提供帮助。
在旧版扩展中,可以迭代safari.application.activeBrowserWindow.tabs
以向向扩展注册的所有选项卡发送消息。
新的safari app扩展程序是否有任何等效功能?
我一直在浏览文档,但没有找到任何关于如何实现这个非常基本的东西的提示。
一个可怕的解决方法是让所有选项卡ping Swift背景,但实际上这是一个基本的东西似乎很荒谬,它不是可用的或由文档覆盖,我错过了什么?
我还尝试保留所有“页面”实例的弱映射,如“messageReceived”处理程序所见,希望SFSafariPage引用将被保留,直到选项卡关闭但它们几乎立即丢失,表明它们是比实际更多的消息通道Safari页面。
答案方法应该是下一个:在injected.js
中,您将消息发送到您的app-ext,例如
document.addEventListener("DOMContentLoaded", function (event) {
safari.extension.dispatchMessage('REGISTER_PAGE')
})
在app-ext中使用smth处理它:
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
}
}}
那么,你可以在运行时通过smth将消息发送到所有打开的页面,如下所示:
for p in pages {
p.dispatchMessageToScript(withName: "message name", userInfo: userInfo)
}
【safari app extensions(从swift后台进程向所有选项卡广播消息)】它看起来很hacky但可行。请享用 :)
推荐阅读
- 在android [duplicate]中运行时检查权限时获取NullPointerException
- Android findViewById空指针[重复]
- 从Safari打开相机APP
- Java applet无法在Safari 7下打开文件(Mac OS X 10.9)
- Safari Webapp强制在单击其他链接时打开Safari
- 限制Google API的Android密钥使用
- 如何在没有app包限制的情况下使用map v2 api key()
- 使用Android应用无法在Google云端硬盘上看到PC上传的文件
- 拒绝访问路径'path-name'(Xamarin.Android)