您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Simple adapter for adding legacy browsers rightclick menu commands.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/435215/986494/libCtxtMenu.js
// ==UserScript== // ==UserLibrary== // @name libCtxtMenu // @namespace https://openuserjs.org/users/Anakunda // @version 1.00.0 // @author Anakunda // @license GPL-3.0-or-later // @copyright 2021, Anakunda (https://openuserjs.org/users/Anakunda) // ==/UserScript== // ==/UserLibrary== 'use strict'; class ContextMenu { constructor(id, create = true) { if (!id) { let dt = new Date().getTime(); this.id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = (dt + Math.random() * 16) % 16 | 0; dt = Math.floor(dt / 16); return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); }); } if (!(this.new = (this.menu = document.body.querySelector(`menu[type="context"][id="${id}"]`)) == null)) return; this.menu = document.createElement('MENU'); this.menu.type = 'context'; this.menu.id = id; if (create) this.create(); } create() { if (this.menu.parentNode == null) document.body.append(this.menu); } destroy() { if (this.menu.parentNode != null) this.menu.parentNode.removeChild(this.menu); } addItem(caption, callback) { if (!this.new) return false; console.assert(this.menu instanceof HTMLMenuElement); const menuItem = document.createElement('MENUITEM'); if (caption) menuItem.label = caption; else return; if (typeof callback == 'function') { menuItem.type = 'command'; menuItem.onclick = evt => { console.assert(this.target instanceof HTMLElement); return this.target instanceof HTMLElement ? callback(this.target) : false; //callback.call(this.target, this.target) }; } this.menu.append(menuItem); return true; } attach(element) { if (!(element instanceof HTMLElement)) throw 'Invalid argument'; console.assert(this.menu instanceof HTMLMenuElement); this.create(); element.setAttribute('contextmenu', this.menu.id); element.oncontextmenu = evt => { this.target = evt.currentTarget }; } detach(element) { if (!(element instanceof HTMLElement)) throw 'Invalid argument'; console.assert(this.menu instanceof HTMLMenuElement); if (element.getAttribute('contextmenu') != this.menu.id) return; element.oncontextmenu = null; element.removeAttribute('contextmenu'); } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址