Boj*_*n V 8 google-chrome-extension safari-extension firefox-addon-webextensions safari-app-extension
我有网络扩展,目前运行在Chrome,Firefox和Opera上.现在我想知道是否有一种方法可以使用相同的代码来构建Safari App Extension,可能类似于PhoneGap(在Safari App Extension项目中包装所有现有的JS代码),或者有一些限制,例如javascript的标签处理和一些事情只需要用本机代码编写.
谢谢
Emm*_*ier 10
您应该能够重用Web扩展中的内容脚本(但您需要重写代码才能发送/接收带有"背景"的消息).必须在Swift或Objective-C中重写后台脚本.
你需要开发:
您在Apple网站上有一个(小)示例:https://developer.apple.com/documentation/safariservices/safari_app_extensions?changes = _2&language = objc
您不应再使用Extension Builder(可从Safari中的Developer菜单访问),因为这仅适用于旧版(纯JS)扩展.所以你需要进入XCode.
最后,但并非最不重要的是......与Safari旧版扩展程序相比,Safari App Extensions"有点"受限(例如,您无法以编程方式打开工具栏弹出窗口,就像使用Chrome网络扩展程序一样其实).
小智 8
现在官方支持这种转换:
分享我的发现可能为时已晚,但仍然如此。
将 Web 扩展程序转换为 safari 应用程序扩展程序的可能性的 简短回答是Yes。这绝对有可能,但很难做到。
我很难找出将 Web 扩展程序移植到 safari 应用程序扩展程序的最佳和最小方法。
移植 Web 扩展的问题
解决方案
编写一些 swift/objective-c 代码是不可避免的。但是在 swift/objective C 中编写桥接代码来促进内容脚本和背景脚本之间的通信使生活更轻松。

在图中,Content-script 保持不变,background-script 是通过创建 webview 注入的。现在从内容脚本收到的任何消息都转发到 webView 背景脚本。还使用设置浏览器扩展 APIevaluvateJavascript
webView.evaluateJavaScript("chrome.runtime.id=function() { return "+ extensionId + " }")
Run Code Online (Sandbox Code Playgroud)
Electron JS 使用简单的 HTML、CSS 和 JavaScript 等网络技术。除非您想做一些高级的事情,否则它不需要本地技能。它可以为单个浏览器设计。它的文件系统属于 Node.js API,适用于 Linux、Mac OS X、Windows。
通过使用本机节点模块,您可以使用 C++ 和 ObjectiveC(或 Swift)编写,并使用 v8 向 node.js 公开 API。这为您提供了很大的灵活性和功能,但需要最多的开发时间,并且仍然需要通过在电子上下文中运行来重用您的背景脚本。
使用这种方法构建的示例应用程序 https://github.com/AdguardTeam/AdGuardForSafari
如果您想在 safari 应用程序扩展中进行窗口/标签管理,请参阅WindowTabManagement
更新
如果您打算使用零本机代码 (Objective-c/swift) 移植旧扩展。请关注这个 repo https://github.com/avast/topee
| 归档时间: |
|
| 查看次数: |
2376 次 |
| 最近记录: |