UserScript

 20th August 2020 at 2:19pm

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);
        }
    }
});