saber酱的抱枕

生于忧患,死于安乐

09/23
13:34
软件

Chrome 扩展下载文件时,不能使用的字符

Windows 中有一些字符不能做文件名:

\ / : ? " < > * |

但是 Chrome 的下载 api 里,有更多的字符不能做文件名,否则下载会失败。这些字符里大多是控制字符。

Chrome 扩展下载文件时,不能使用的字符可以建立一个正则表达式,对文件名进行替换:

// 不安全的字符,是 Chrome 和 Windows 不允许做文件名的字符
const notSafeString = `[\u0001-\u001f\u007f-\u009f\u00ad\u0600-\u0605\u061c\u06dd\u070f\u08e2\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufdd0-\ufdef\ufeff\ufff9-\ufffb\ufffe\uffff\\\/:\?"<>\*\|~]`
const safeFileName = new RegExp(notSafeString, 'g') // 安全的文件名

这些字符是 Reinford 测试出来的,测试结果的文件:
链接: https://pan.baidu.com/s/1y8AVKGmasV1ZYiCErwc1Zg 提取码: q41v

此外,还有一些情况要处理。

1. Chrome 不允许文件夹和文件名的开头、结尾使用点 .
2. 路径首尾不允许有空格。
3. 路径中出现多个斜线会报错,如 download//a.jpg

Chrome 扩展下载文件时,不能使用的字符

07/4
09:47
学习 软件

Chrome 扩展修改 referer 实现跨域

通过 chrome.webRequest.onBeforeSendHeaders 事件来设置 referer,来达到跨域的目的。

1. 在 manifest.json 中声明权限

"permissions": [
    "tabs", "downloads", "webRequest", "webRequestBlocking", "*://www.pixiv.net/*", "*://www.pixivision.net/*", "*://i.pximg.net/*"
]

webRequest、webRequestBlocking 是必须的;后面的网址列表表示这个扩展的生效范围。

在做跨域的时候,需要把你的目标网址也添加进去。比如你的扩展运行在 a.com,去请求 b.com 的内容,那么这两个网址都要写进去。
Read More →

Chrome 扩展修改 referer 实现跨域

03/9
06:29
软件

获取 Chrome 浏览器的版本号

刚才需要获取 Chrome 浏览器的版本号,写了个代码如下:

let agent = navigator.userAgent;
if (agent.includes('Chrome')) {
	let chrome_ver = parseInt(agent.match(/[\d.]+/gi)[5]);
	console.log(chrome_ver);
}

此代码在 Windows 上的 Chrome 64 以及 Android 上的 Chrome 61 里测试通过。

不过如果以后时间长了,再用的话就要先验证一下对不对了。

获取 Chrome 浏览器的版本号

04/14
10:41
学习

制作chrome扩展的一些经验

Chrome-Extensions chrome扩展

本文略微记录一下开发chrome扩展的经验,免得以后用到了还要再去查一遍文档。注意这不是教程,只是一点人生的经验……教程可以参考这里

1.文件结构:

在扩展的根目录必须有个manifest.json文件,这个文件很重要,参数可以去文档里看。

其他的所有文件可以放在根目录,也可以建立文件夹存放。
扩展的图标可以用jpg或者png格式;官方建议是不要把图标占满画布,而是在四周留下一点空白。
一般我们需要一个在后台默默运行的js,通常叫做background.js,它能使用所有chrome扩展的API。
通常我们也需要有一个在前台运行的js,可以叫做content.js。这个js会被加载进前台页面执行,它只能使用很少的chrome扩展的API。而且它通常只能访问dom结构,不能直接使用页面上定义的函数。
如果需要也可以建立一个活动页面,一般叫做popup.html。
如果需要也可以建立一个选项页面,一般叫做options.html。
以上这些都需要在manifest.json里定义。
其他的文件可以自行发挥,比如html文件、css文件、图片等,有需要就可以建立,然后自行调用即可。

在background的参数里设置"persistent": false可将扩展作为event page,可以减少一些内存占用。
Read More →

制作chrome扩展的一些经验