Idea
Safari10支持App Extension。于是想做一个在视频页点击ToolbarItem后在MOSP解析播放,如果是电视剧,还将所有集都解析进播放列表。
前提:Safari10只支持10.11.5以上的版本
拒绝Flash,视频搜索播放!支持优酷、爱奇艺、芒果TV、QQ视频、乐视
实现
本文基于Xcode8.0和OS X EI Capitan 10.11.6
Safari Extension Info需要设置SFSafariContentScript(用于注入Script)、SFSafariToolbarItem(用于设置工具栏点击图标)、SFSafariWebsiteAccess(用于设置哪些网站允许注入使用改Extension)
要在Safari成功加载该App Extension还有几个需要注意的地方:
Safari浏览器相关设置
Safari浏览器开发菜单需要在Safari设置–>高级–>在菜单栏显示“开发”菜单启用,然后在开发菜单中勾选上允许未签名的扩展
Xcode中相关设置
一、Safari Extension Deployment Target设置
我用于开发的系统10.11.6,默认创建的Safari Extension模版中Deployment Target是10.12,不将Deployment Target设置为10.11的话编译后Safari浏览器扩展列表中始终不会加载。
二、相关Swift文件的Target Membership设置
设置相关Swift文件的Target Membership是为了App与Safari Extension之间代码能直接重用
三、App Group设置
准确的说,App与Safari Extension属于2个不同的App,所以要分别为App和Safari Extension设置App Group,二者都加入com.zlxdike.MOSP.Data同一个Group。这样才能让2个不同的App共享和交互数据。
通过上面的设置后,App与Safari Extension就可以共用代码和交互数据了。至于通过Swift如果共用数据简单说下吧。
- 透过UserDefaults存取和读取需要共用的数据(比如本文中的播放列表)
- 透过NotificationCenter来Post通知数据更改。App ViewController接获通知,更新页面。
下面是PlayListManage.swift相关代码
1 | // |
后记
我并没有个人证书来签名应用,所以每次重启Safari10都需要开启允许未签名扩展,于是该Safari Extension使用起来反而没想象中的方便。最后只能不了了之,就权当算是了解Safari Extension开发的相关技术与要求吧。