您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Waits for elements
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://updategreasyfork.deno.dev/scripts/432418/974366/Wait%20For%20Selector.js
// ==UserScript== // @name Wait For Selector // @namespace http://tampermonkey.net/ // @description Waits for elements // @author Kumirei // @include *community.wanikani.com* // @grant none // ==/UserScript== (function($, wfs) { let version = '0.1.1' // Create new observer on body to monitor all DOM changes let observer = new MutationObserver(mutationHandler) observer.observe(document.getElementsByTagName('html')[0], {childList: true, subtree: true}) // Interface for interacting with the library let interface = { version, observer: observer, wait: waitForSelector, unwait: unwaitID, waits: {}, waitsByID: {}, nextID: 0 } // Start installInterface() // Creates a new entry to search for whenever a new element is added to the DOM function waitForSelector(selector, callback) { if (!interface.waits[selector]) interface.waits[selector] = {} interface.waits[selector][interface.nextID] = callback interface.waitsByID[interface.nextID] = selector search(selector, true) return interface.nextID++ } // Deletes a previously registered selector function unwaitID(ID) { delete interface.waits[interface.waitsByID[ID]][ID] delete interface.waitsByID[ID] } // Makes sure that the public interface is the newest version and the same as the local one function installInterface() { if (!wfs) window.wfs = interface else if (wfs.version < interface.version) { wfs.version = interface.version wfs.observer.disconnect() wfs.observer = interface.observer wfs.wait = interface.wait wfs.unwait = interface.unwait } interface = wfs || interface } // Waits until there has been more than 300 ms between mutations and then checks for new elements let lastMutationDate = 0 // Epoch of last mutation event function mutationHandler(mutations) { let duration = Date.now() - lastMutationDate lastMutationDate = Date.now() if (duration > 300) { for (let selector in interface.waits) search(selector) } } // Searches for the selector and calls the callback on the found elements function search(selector, all=false) { $(selector).each((i, e)=>{ let callbacks = Object.values(interface.waits[selector]) if (all || !e.WFSFound || e.WFSFound == lastMutationDate) { for (let callback of callbacks) callback(e) e.WFSFound = lastMutationDate } }) } })(window.jQuery, window.wfs);