您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
R4 Utils Library
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/482597/1301960/R4%20Utils.js
- // ==UserScript==
- // @name R4 Utils
- // @description R4 Utils Library
- // @version 1.0.1
- // ==/UserScript==
- function R4Utils() {
- /* ------------------------------------------------- */
- /* --------------fromHTML--------------------------- */
- /* ------------------------------------------------- */
- function fromHTML(html, trim = true) {
- // Process the HTML string.
- html = trim ? html : html.trim();
- if (!html) return null;
- // Then set up a new template element.
- const template = document.createElement('template');
- template.innerHTML = html;
- const result = template.content.children;
- // Then return either an HTMLElement or HTMLCollection,
- // based on whether the input HTML had one or more roots.
- if (result.length === 1) return result[0];
- return result;
- }
- /* ------------------------------------------------- */
- /* --------------transliterate---------------------- */
- /* ------------------------------------------------- */
- function transliterate(word) {
- let answer = "";
- const a = {};
- a["Ё"] = "YO";
- a["Й"] = "I";
- a["Ц"] = "TS";
- a["У"] = "U";
- a["К"] = "K";
- a["Е"] = "E";
- a["Н"] = "N";
- a["Г"] = "G";
- a["Ш"] = "SH";
- a["Щ"] = "SCH";
- a["З"] = "Z";
- a["Х"] = "H";
- a["Ъ"] = "'";
- a["ё"] = "yo";
- a["й"] = "i";
- a["ц"] = "ts";
- a["у"] = "u";
- a["к"] = "k";
- a["е"] = "e";
- a["н"] = "n";
- a["г"] = "g";
- a["ш"] = "sh";
- a["щ"] = "sch";
- a["з"] = "z";
- a["х"] = "h";
- a["ъ"] = "'";
- a["Ф"] = "F";
- a["Ы"] = "I";
- a["В"] = "V";
- a["А"] = "A";
- a["П"] = "P";
- a["Р"] = "R";
- a["О"] = "O";
- a["Л"] = "L";
- a["Д"] = "D";
- a["Ж"] = "ZH";
- a["Э"] = "E";
- a["ф"] = "f";
- a["ы"] = "i";
- a["в"] = "v";
- a["а"] = "a";
- a["п"] = "p";
- a["р"] = "r";
- a["о"] = "o";
- a["л"] = "l";
- a["д"] = "d";
- a["ж"] = "zh";
- a["э"] = "e";
- a["Я"] = "Ya";
- a["Ч"] = "CH";
- a["С"] = "S";
- a["М"] = "M";
- a["И"] = "I";
- a["Т"] = "T";
- a["Ь"] = "'";
- a["Б"] = "B";
- a["Ю"] = "YU";
- a["я"] = "ya";
- a["ч"] = "ch";
- a["с"] = "s";
- a["м"] = "m";
- a["и"] = "i";
- a["т"] = "t";
- a["ь"] = "'";
- a["б"] = "b";
- a["ю"] = "yu";
- for (const i in word) {
- if (word.hasOwnProperty(i)) {
- answer += a[word[i]] === undefined ? word[i] : a[word[i]];
- }
- }
- return answer;
- }
- /* ------------------------------------------------- */
- /* --------------slugify---------------------------- */
- /* ------------------------------------------------- */
- function slugify(str) {
- return String(str)
- .normalize("NFKD") // split accented characters into their base characters and diacritical marks
- .replace(/[\u0300-\u036f]/g, "") // remove all the accents, which happen to be all in the \u03xx UNICODE block.
- .trim() // trim leading or trailing whitespace
- .toLowerCase() // convert to lowercase
- .replace(/[^a-z0-9 -]/g, "") // remove non-alphanumeric characters
- .replace(/\s+/g, "-") // replace spaces with hyphens
- .replace(/-+/g, "-"); // remove consecutive hyphens
- }
- /* ------------------------------------------------- */
- /* --------------executeLocation-------------------- */
- /* ------------------------------------------------- */
- class AsyncLock {
- constructor () {
- this.release = () => {}
- this.promise = Promise.resolve()
- }
- acquire () {
- this.promise = new Promise(resolve => this.release = resolve)
- }
- }
- const execute_location_lock = new AsyncLock();
- function executeLocation(func, vars = {}, prefix = "ExecuteLocation", lock = execute_location_lock) {
- return new Promise((resolve, reject) => {
- // Wait for the lock to be released
- lock.promise.then(() => {
- // Acquire the lock
- lock.acquire();
- try {
- // Convert the function to a string of code
- const funcString = `(${func.toString()})()`;
- // Define a new CustomEvent that will be dispatched when the function finishes executing
- const eventName = prefix + Math.random().toString(36).substring(7);
- // Listen for the function executed event
- document.addEventListener(eventName, (event) => {
- resolve(event.detail.result);
- // Release the lock
- lock.release();
- });
- // Convert the vars object to a string of code that defines these variables
- const varsString = Object.entries(vars).map(([name, value]) => {
- return `var ${name} = ${JSON.stringify(value)};`;
- }).join('');
- // Use location.assign to execute the function in the global scope
- // The function result is sent as a CustomEvent
- location.assign(`javascript:(function() {
- ${varsString}
- const result = ${funcString};
- const event = new CustomEvent('${eventName}', { detail: { result: result } });
- document.dispatchEvent(event);
- })();void(0)`);
- } catch (e) {
- reject(e);
- // Release the lock in case of an error
- lock.release();
- }
- });
- });
- }
- return {
- fromHTML,
- transliterate,
- slugify,
- executeLocation,
- };
- }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址