前言
通过 浏览器 extension 插件开发系列(02) -- Chrome 插件的启动以及调试 和 浏览器 extension 插件开发系列(03) -- Firefox 插件的启动以及调试 可以看到Chrome
和Firefox
的安装和调试方式。接下来就是Safari
了, 本节看下 Safari
怎么创建插件。
在Safari 扩展创建器导入一个新的扩展
首先要在 Safari 扩展创建器
导入一个新的扩展,必须要把这个文件夹,命名为 safariextensiton
后缀名的才行,比如airdroid.safariextension
, 这样扩展器才能识别,并载入。
即要把 resources\airdroid\data
的data
目录 改成 safariextension
后缀的,比如 airdroid.safariextension
, 有了这个文件之后,就要导入这个插件包了, 操作是Safari -> 开发 --> 显示扩展创建器
:
点击添加按钮,然后选择添加扩展。选择 airdroid.safariextension
这个目录
这时候就添加进去了。就可以在导航栏看到了:
但是这边可以看到,会有一个警告:
显示你没有Safari 扩展证书
。如果没有这个证书的话,那么就不能上Safari
的store商店
。 我们可以参照这个教程 浏览器 extension 插件开发系列(05) -- Safari 插件申请开发者证书 来操作。
扩展器参数
接下来就详细了解一下。扩展创建器的一些参数。
我们知道 , 在 Safari 扩展中 , 是由如下几个部分来提供扩展功能 :
- 工具栏按钮
- 扩展工具条
- 上下文关联菜单
- 注入 (JavaScript) 脚本
- 注入样式表单
而 Safari 扩展框架中其实是存在了一条分割线 , 将整个体系结构分为了两个部分 :
- Safari 应用层 (背景页) : 包含工具条按钮 , 扩展工具条 , 页面标签 , 页面窗口 , 上下文菜单等
- 页面内容层 : 包含修改页面内容的 JavaScript 和 CSS
而这两部分不能直接调用对方的代码 , 需要通过给对方发送消息 , 再由对方的消息处理方法来调用所需的代码。 当然 , 不是每一个 Safari 扩展都需要做这样的消息调用 , 例如简单的”关闭网页”按钮扩展就不需要和页面内容层交互 , 也就不需要消息调用及代理等处理逻辑了。
而以上这些的配置都是在 Info.plist 文件读取的。是一行key,一行value的方式,所以完整的 Info.plist
如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
完整的截图如下:
这边有几个细节:
popup.html
的高宽度,可以不用在plist里面指定- 有一个全局文件。叫
global.html
这个其实就是chrome
的manifest.json
的background
选项。只不过chrome
是自己生成的global
页面。即背景页
而Safari
是要自己建的。只不过是一模一样的: global.html
:
1 | <!DOCTYPE html> |
调试
Safari
跟chrome
一样。一个是跟chrome
一样的在后台运行的界面, 即global页面
,一个是普通页面。
而调试也是差不多。对于背景页面。chrome
是在 插件页面点击弹出的。
而Safari
也是在扩展创建器点击弹出的。
对于普通页面的话。就直接右击选择就行了。
如果文件有改变的话。直接点击重新载入即可:
背景页重新载入。是在扩展器处理的。
总结
这样子Safari
插件的添加和调试就差不多这样了。接下来我们就要开始接入具体的业务了。
系列文章:
浏览器 extension 插件开发系列(01) -- 前言和确认需求
浏览器 extension 插件开发系列(02) -- Chrome 插件的启动以及调试
浏览器 extension 插件开发系列(03) -- Firefox 插件的启动以及调试
浏览器 extension 插件开发系列(04) -- Safari 插件的添加以及调试
浏览器 extension 插件开发系列(05) -- Safari 插件申请开发者证书
浏览器 extension 插件开发系列(06) -- 各浏览器导航栏按钮的配置的点击出现的panel
浏览器 extension 插件开发系列(07) -- 获取各浏览器端的背景页
浏览器 extension 插件开发系列(08) -- 背景页启动和登录持久化
浏览器 extension 插件开发系列(09) -- popup以及其他前端页面的启动
浏览器 extension 插件开发系列(10) -- 事件驱动模型
浏览器 extension 插件开发系列(11) -- 登录模块(包括第三方登录和弹框)
浏览器 extension 插件开发系列(12) -- 实现右键菜单推送消息
浏览器 extension 插件开发系列(13) -- 实现消息过来出现桌面通知
浏览器 extension 插件开发系列(14) -- 点击reply出现回复小窗口
浏览器 extension 插件开发系列(15) -- chrome多文件上传(拖拽上传或者点击上传)
浏览器 extension 插件开发系列(16) -- Firefox 遇到的问题
浏览器 extension 插件开发系列(17) -- Safari 遇到的问题