前言
在这个插件的Chrome
插件版本,是允许多文件上传的,包括拖拽上传和点击上传。(Firefox
和 Safari
不支持)。截图如下:
Quick notes
这个插件开发最难的地方就是消息通信的事件驱动模型。而事件驱动模型,在这个项目可以分为3部分:
其中不同的浏览器有不同的实现方法,主要代码在前端的 base.js
和 背景页的 event.js
, 其中 base.js
在浏览器 extension 插件开发系列(09) -- popup以及其他前端页面的启动 已经分析了一部分,接下来我们结合以上三种情况来分析 event.js
。
在本插件中,popup
页面以及其他前端页面的启动都差不多。
ps: 也有一些小差别,就是Safari
下 popup
页面和其他的前端页面获取background
对象的形式不一样。浏览器 extension 插件开发系列(07) -- 获取各浏览器端的背景页
以 popup.html
页面为例, 代码如下:
通过 浏览器 extension 插件开发系列(02) -- Chrome 插件的启动以及调试 和 浏览器 extension 插件开发系列(03) -- Firefox 插件的启动以及调试 可以看到Chrome
和Firefox
的安装和调试方式。接下来就是Safari
了, 本节看下 Safari
怎么创建插件。
首先要在 Safari 扩展创建器
导入一个新的扩展,必须要把这个文件夹,命名为 safariextensiton
后缀名的才行,比如airdroid.safariextension
, 这样扩展器才能识别,并载入。
通过 浏览器 extension 插件开发系列(02) -- Chrome 插件的启动以及调试 可以知道chrome extension
的一些启动和调试, 接下来讲讲Firefox
的。
Firefox
需要的文件比较多:
最近因为 Google 公布了,到 2020 年 6 月不在支持非 Chrome OS 平台的 chrome app 的支援。具体看: Google 確定今年 3 月不再受理上架 Chrome Apps,6 月結束支援, 刚好我们有一个 chrome app 有应用到业务中。那么就要赶在 6月份之前,将这个 chrome app 改造成 chrome extension 的方式。这样子就可以继续用了。 考虑到之前我也有做过一个 浏览器 extension 插件,而且是同时兼容 chrome, Firefox, Safari 这三个浏览器的, 但是那时候是 2016 年做的插件,已经隔了三年多了,几乎全忘光了,赶紧翻了一下之前做的笔记,还好那时候有做开发笔记。所以就将这一份开发笔记挪到了 blog 上。
前段时间有收到一封来自国外安全公司的关于安全的预警邮件,大致的意思就是 他发现我们站点的 忘记密码,发送验证邮件 的功能并没有做防刷限制,导致他可以用burp suite 之类的web安全工具来批量刷接口,或者是自己写脚本来批量刷。 这样就会导致我们发送大量的垃圾邮件,这样子不仅会打扰我们的用户,而且还会导致我们发邮件的费用增加,更严重的可能会导致我们的 SES 账号被 AWS 封掉,具体之前有出现过:又记一次AWS SES 邮件服务账号被禁的情况
因为这个接口的特殊性(它不需要用户登录,所以也没有所谓的 cookie,session 验证,更没有 jwt token 之类的身份验证), 所以在排除掉 身份验证之后,只能通过其他的方式来处理:
在创建表的时候,我们一般都会建一个 create_date
, 每次代码插入的时候,不需要代码赋值, mysql 会在创建的时候,给他赋值。设置的格式是这样子的:1
`create_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
但是如果我们想监控这一行记录什么被修改的话,就要设置另一个字段,比如 update_date
, 一旦记录有被 update,那么就更新该字段的值,不需要程序去记录,而是由mysql自动更新。
设置成这样子就可以了:1
`update_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
之前遇到一个问题,我试图在 mysql 中保存一个 emoji 字符,但是发现取出来之后是不对的,也没法显示???
我查了一下,我这个库的字符集确实是 utf8
, 所以应该是可以保存 emoji 标签这种4个字节的字符的。但是我后面查了一下资料,发现根本不是我想的那样。 mysql 的字符集 chareacter-set
中的 utf8
根本不是我理解的 UTF-8
, mysql 的 utf8
只支持每个字符最多三个字节,而真正的 UTF-8
是每个字符最多四个字节。MySQL一直没有修复这个bug,他们在2010年发布了一个叫作 utf8mb4
的字符集,绕过了这个问题, mb4
就是most bytes 4
的意思,专门用来兼容四字节的unicode
。
所以总结了一下这个问题:
utf8mb4
是真正的UTF-8
utf8
是一种 专属的编码
,它能够编码的 Unicode 字符并不多之前在用 mysql 查询有 float
字段的时候,比如某一个字段 fee,明明有一条是 fee 为 1.99 的记录,但是就是查不到??1
select * from fee_mode where is_pp_recurring = 1 and is_enable = 1 and fee = 1.99
后面查了一下,发现原来查询 float
字段是有坑的:
原来在 MYSQL 中,字段类型为 float
的字段,如果不指定 float
的长度和小数点位数,要根据 float
字段的值精确查找,结果会是空,原因是在 mysql 中,float是浮点数,Mysql存储的时候是近似值,所以用精确查找无法匹配;但可以用like去匹配。