🏠 Home 

TamperMonkeyRouter

Router for TamperMonkey scripts

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/468396/1203270/TamperMonkeyRouter.js

// ==UserScript==
// @name         TamperMonkeyRouter
// @name:zh-CN   TamperMonkey路由
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Router for TamperMonkey scripts
// @author       HowardZhangdqs
// @grant        none
// @license      WTFPL
// ==/UserScript==
(function () {
'use strict';
const Router = class Router {
// static opt = {
//     hashchange: false,
// };
// constructor(options = {}) {
//     this.opt = Object.assign(this.opt, options || {});
// }
static getParamType(param) {
const _t = typeof param
return (_t == "object"
? Object.prototype.toString.call(param).slice(8, -1)
: _t
).toLowerCase();
}
static is_match(src, input) {
if (src.length == 0 && input.length == 0) return true;
if (src[0] == "*" && src.length == 1) return true;
if (src.length == 0 || input.length == 0) return false;
if (src[0] == "?")
return this.is_match(src.substring(1), input.substring(1));
else
if (src[0] == "*")
return this.is_match(src.substring(1), input) || this.is_match(src.substring(1), input.substring(1)) || this.is_match(src, input.substring(1));
else
if (src[0] == input[0])
return this.is_match(src.substring(1), input.substring(1));
else return false;
}
router(path, callback) {
const href = window.location.href;
if (Router.getParamType(path) == "string") {
if (Router.is_match(path, href)) (() => { callback(); })();
} else if (Router.getParamType(path) == "regexp") {
if (path.test(href)) (() => { callback(); })();
} else {
throw new Error("Invalid type `" + Router.getParamType(path) + "` of input");
}
}
}
window.TamperMonkeyRouter = new Router().router;
})();