浏览器 extension 插件开发系列(17) -- Safari 遇到的问题

前言

本节主要是讲了一下 Safari extension 在开发的时候,遇到的一些问题,大的问题会在之前的系列会提到。小的问题会在这边提。

如何找到现有的 extension 的代码

开发一个东西,一个很快的捷径就是参考别人的代码,尤其是一些界面细节的时候,所以当我们找到了一个值得我们参考的 extension 的时候,怎么样得到这个插件的源代码,这个也是很重要的。

以这个应用 pushbullet 来说,当安装了 pushbulletSafari extension, 接下来当前要找到插件所在的文件,从而看到代码。假设我已经安装了,接下来只要到这个文件夹就可以看到(mac 机子):

1
~/Library/Safari/Extensions

png

就可以看到这个文件了

png

接下来进行解压:

1
xar -xf 'TheExtensionName.safariextz'

就可以得到解压之后的文件夹了

png

里面就是对应的代码了

将扩展打包成安装包

当我们扩展写完之后,如果要给比人用的话,那么是要变成安装包的方式的,具体步骤是在扩展创建器里面,点击创建软件包,然后选择一个目录来生成安装包。这样就可以了

png

png

怎么调试弹出框 popup 页面

在开发 Safari extension 的时候,在调试弹出框 popup 的时候,会出现一个很蛋疼的问题。就是在弹出页面右键选择审查元素,这时候调试窗口出来了,但是弹出页面就消失了(原因就是因为失去焦点了,所以消失了,跟Firefox一样)如果要进行界面上的大改动,肯定不能这样调的。

有一种方法是单独在浏览器窗口中打开,然后作为普通html页面来调试, 直接复制完整的 url, 然后在浏览器打开;

png

png

在用 Safari extension 实现第三方登录的时候,发现服务端写入前端的cookie,在前端请求的时候,带过去的cookie中只显示ex_account_sid,而没有了 ex_account_info, 后面在用抓包工具抓取的时候,发现ex_account_sid 叫做 parameter cookie, 而 ex_account_info 叫做 session_cookie, 而 parameter cookieextension 请求的时候,是可以带过去的,而 session cookie是带不过去的,后面查了一下服务端的代码, 发现如果keep参数为0(就是不保持登录), 那么 ex_account_info 就没有设置过期时间,这时候该cookie就会变成一个 session cookie,这时候浏览器插件就不会在请求的时候,把这个cookie带过去,而ex_account_sid 一直都有设置过期时间,才能带过来的。

所以总结一下, 不是不能带 cookie,而是只有 parameter cookie 类型的 cookie 才能带,就是要有明确的过期时间的 cookie,才能带过去。 而像session cookie 这种会话 cookie 是带不过去的。


系列文章:
浏览器 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 遇到的问题