您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Wrappers for dealing with variations in userscript managers.
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/478349/1284417/NH_userscript.js
- // ==UserScript==
- // ==UserLibrary==
- // @name NH_userscript
- // @description Wrappers for dealing with variations in userscript managers.
- // @version 5
- // @license GPL-3.0-or-later; https://www.gnu.org/licenses/gpl-3.0-standalone.html
- // @homepageURL https://github.com/nexushoratio/userscripts
- // @supportURL https://github.com/nexushoratio/userscripts/issues
- // @match https://www.example.com/*
- // ==/UserLibrary==
- // ==/UserScript==
- window.NexusHoratio ??= {};
- window.NexusHoratio.userscript = (function userscript() {
- 'use strict';
- /** @type {number} - Bumped per release. */
- const version = 5;
- /** Library specific exception. */
- class UserscriptError extends Error {
- /** @inheritdoc */
- constructor(...rest) {
- super(...rest);
- this.name = this.constructor.name;
- }
- }
- /**
- * @typedef LicenseData
- * @property {string} name - License name.
- * @property {string} url - URL pointing to the license.
- */
- /**
- * Per the *old* GM docs:
- * https://sourceforge.net/p/greasemonkey/wiki/Metadata_Block/#license
- * @returns {LicenseData} - Extracted from the userscript header.
- * @throws {Error} - If cannot be extracted.
- */
- function licenseData() {
- let license = GM.info.script.license;
- if (!license) {
- const magic = '// @license ';
- // Try a legacy way
- const header = GM.info.scriptMetaStr;
- if (header) {
- const line = header.split('\n')
- .find(l => l.startsWith(magic));
- if (line) {
- license = line.slice(magic.length)
- .trim();
- }
- }
- }
- if (!license) {
- const msg = [
- 'Unable to extract license information from the userscript.',
- // eslint-disable-next-line no-magic-numbers
- JSON.stringify(GM.info, null, 2),
- ].join('\n');
- throw new UserscriptError(msg);
- }
- const [name, url] = license.split(';');
- return {
- name: name.trim(),
- url: url.trim(),
- };
- }
- /** @returns {string[]} - Raw text about the current environment. */
- function environmentData() {
- const gm = GM.info;
- const msgs = [`${gm.script.name}: ${gm.script.version}`];
- msgs.push('NexusHoratio libraries:');
- for (const [lib, obj] of Object.entries(window.NexusHoratio)) {
- if (Object.hasOwn(obj, 'version')) {
- msgs.push(` ${lib}: ${obj.version}`);
- } else {
- msgs.push(` ${lib}: Unknown version`);
- }
- }
- msgs.push(`Userscript manager: ${gm.scriptHandler} ${gm.version}`);
- if (gm.injectInto) {
- msgs.push(` injected into "${gm.injectInto}"`);
- }
- // Violentmonkey
- if (gm.platform) {
- msgs.push(`Platform: ${gm.platform.browserName} ` +
- `${gm.platform.browserVersion} ${gm.platform.os} ` +
- `${gm.platform.arch}`);
- }
- // Tampermonkey
- if (gm.userAgentData) {
- let msg = 'Platform: ';
- for (const brand of gm.userAgentData.brands.values()) {
- msg += `${brand.brand} ${brand.version} `;
- }
- msg += `${gm.userAgentData?.platform} `;
- msg +=
- `${gm.userAgentData?.architecture}-${gm.userAgentData?.bitness}`;
- msgs.push(msg);
- }
- return msgs;
- }
- /**
- * Fetches value from userscript storage if granted.
- *
- * Purposefully no errors if permissions are not granted
- *
- * @param {string} key - The name of the value to load.
- * @param {*} defaultValue - Value if not stored OR not enabled.
- * @returns {Promise<*>} - The value fetched or defaultValue.
- */
- function getValue(key, defaultValue) {
- if (GM.getValue) {
- return GM.getValue(key, defaultValue);
- }
- return Promise.resolve(defaultValue);
- }
- /**
- * Sets a value in userscript storage if granted.
- *
- * Purposefully no errors if permissions are not granted
- *
- * @param {string} key - The name to use in the storage.
- * @param {*} value - The value to set.
- * @returns {Promise<*>} - Always resolves to null; mostly used to ensure
- * the write is complete.
- */
- function setValue(key, value) {
- if (GM.setValue) {
- return GM.setValue(key, value);
- }
- return Promise.resolve(null);
- }
- return {
- version: version,
- UserscriptError: UserscriptError,
- licenseData: licenseData,
- environmentData: environmentData,
- getValue: getValue,
- setValue: setValue,
- };
- }());
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址