UserScript 是开发者自己编写的 JS 脚本,用来增强一些特定网站的功能,比如实现 Google 搜索结果的 自动翻页。
这些代码大多数托管在 Greasy Fork 上。我在上面也注册并上传了 一些脚本。
浏览器需要安装 插件 才能跑 UserScript,Chrome 上目前是 TamperMonkey。
等待元素出现
有人写了个函数,用来实现某一元素出现时做特定逻辑。我 fork 了代码在 Gist 上,分别是带 jQuery 依赖的 版本 和纯 JS 的 版本。这两个 Stack Overflow 问题描述了一些使用场景和示例。我在 GreasyFork 上放了一份纯 JS 实现的 waitForKeyElements。
UserScript 中 require 的写法:
// @require https://greasyfork.org/scripts/370236-waitforkeyelements/code/waitForKeyElements.user.js
// @require https://cdn.jsdelivr.net/npm/jquery
AJAX Hook
AJAX hook 可以让你通过 JS 修改 AJAX 请求返回的数据。wendux/Ajax-hook 实现了一套 AJAX hook 接口。
Require:
// @require https://unpkg.com/ajax-hook/dist/ajaxhook.min.js
例子:
function tamperResponse(xhr) {
var response = JSON.parse(xhr.responseText);
var l = response.data.data;
for (var i = 0; i != l.length; ++i) {
if (l[i].record_status != 9) {
l[i].action_label += " (" + recordStatus[l[i].record_status] + ")";
l[i].record_status = 9;
}
}
xhr.responseText = JSON.stringify(response);
}
hookAjax({
onreadystatechange:function(xhr){
if (xhr.responseText.length == 0) {
return;
}
var location = getLocation(xhr.responseURL);
if (location.pathname.endsWith("/access/list/test")) {
tamperResponse(xhr);
}
},
onload:function(xhr){
if (xhr.responseText.length == 0) {
return;
}
var location = getLocation(xhr.responseURL);
if (location.pathname.endsWith("/access/list/test")) {
tamperResponse(xhr);
}
}
});