您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A script for interfacing with my Key-Based Config UI.
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/419978/956314/Key-Based%20Config.js
- // ==UserScript==
- // @name Key-Based Config
- // @author Callum Latham <callumtylerlatham@gmail.com> (https://github.com/ctl2/key-based-config)
- // @exclude *
- // @description A script for interfacing with my Key-Based Config UI.
- // ==/UserScript==
- let iframeExists = false;
- function kbcConfigure(storageKey, title, metaTree) {
- return new Promise((resolve, reject) => {
- if (iframeExists) {
- reject(new Error("A key-based-config iFrame already exists."));
- } else if (typeof GM.getValue !== "function" || typeof GM.setValue !== "function") {
- reject(new Error("The key-based config script requires GM.getValue and GM.setValue permissions."));
- } else {
- iframeExists = true;
- const kbcSrc = "https://callumlatham.com/key-based-config/";
- // Make iFrame
- let iframe = document.createElement("iframe");
- iframe.src = kbcSrc;
- iframe.style.position = "fixed";
- iframe.style.height = "100vh";
- iframe.style.width = "100vw";
- // Listen for iFrame communication
- window.addEventListener("message", async (message) => {
- switch (message.data.event) {
- case "open":
- // Pass initilisation data
- const valueForest = await GM.getValue(storageKey);
- iframe.contentWindow.postMessage({
- title: title,
- metaTree: metaTree,
- valueForest: valueForest === undefined ? [] : valueForest
- }, "*");
- break;
- case "change":
- // Update stored value
- GM.setValue(storageKey, message.data.valueForest);
- break;
- case "close":
- // Close iFrame
- iframeExists = false;
- iframe.remove();
- // Resolve promise
- resolve(message.data.valueForest);
- break;
- default:
- // No need to error the promise here; I'm probably just observing a message from another script
- console.warn("Unrecognised message 'event' value observed by key-based config script: '" + message.data.type + "'");
- }
- });
- }
- });
- }