UserScript

20th August 2020 at 2:19pm
JavaScript Productivity

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