文章目录
- safari_web_extensions
-
- 开发扩展
-
- 扩展有3个主要部分:
- [使用 WebExtension API](#使用 WebExtension API)
- [local debug](#local debug)
-
- [Safari中允许运行 未签名的扩展](#Safari中允许运行 未签名的扩展)
- [install extension](#install extension)
- [update extension](#update extension)
- publish
safari的extension文档不是很好,建议参考mozilla文档
https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions
safari_web_extensions
safari_web_extension以app的形式安装,安装 扩展APP后,扩展会安装在safari浏览器中
如果不是Apple开发者计划的一部分,或者如果您尚未为现有的Xcode项目配置开发者身份,则您的Safari Web扩展将不会使用开发证书签名
开发扩展
扩展有3个主要部分:
backgroud.js
后台脚本
在backgroud环境运行,提供了 window 全局变量,也提供了所有的标准 DOM API。content.js
内容脚本
可以使用 document 对象获取、操作页面的DOM
。popup.js
扩展弹框脚本
是一个普通网页一样
使用 WebExtension API
- WebExtension API列表
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Browser_support_for_JavaScript_APIs
要使用WebExtension API,需要在你的 manifest.json
中申请WebExtension API权限
- manifest.json case
json
"permissions": [
"runtime",
"activeTab",
"tabs",
"scripting",
"messaging",
"webNavigation",
"<all_urls>"
]
- 使用
browser
命名空间访问这些 API。
js
browser.runtime
browser.tabs
runtime
提供一组消息通信 API,在附加组件的不同模块间通信。
js
// 发送消息
browser.runtime.sendMessage()
// 接受消息
browser.runtime.onMessage.addListener(listener)
browser.runtime.onMessage.removeListener(listener)
browser.runtime.onMessage.hasListener(listener)
- case
js
browser.runtime.sendMessage({ greeting: "hello" }).then((response) => {
console.log("Received response: ", response);
});
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
console.log("Received request: ", request);
});
local debug
Safari中允许运行 未签名的扩展
Safari默认情况下会忽略未签名的扩展程序
- Safari > Settings.
- Advanced > Show features for web developers
- Develop > Allow Unsigned Extensions 【每次重启safari都要重新打开】
install extension
- 选择 应用程序(macOS)
- run
应用程序主页面
没报错的话safari extension会显示出来
update extension
-
删除旧的 bundle
Xcode Product > Clean Build Folder
-
Xcode Product > Build
Xcode会将最新的更改打包到macOS应用程序中的扩展文件中。构建完成后,您的扩展更新即可在Safari中使用。
publish
Xcode Product > Archive > Distribute App
- 打包到本地
- 发布到app store