您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A utility function, for Greasemonkey scripts, that detects and handles dynamic content.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/482702/1299083/Wait%20for%20key%20element.js
// ==UserScript== // @name Wait for key elements // @namespace http://tampermonkey.net/ // @version 0.1 // @description A utility function, for Greasemonkey scripts, that detects and handles dynamic content. // @author https://github.com/cgriebel // @grant none // @include * // ==/UserScript== /*--- waitForKeyElements(): Usage example: waitForKeyElements ("div.comments", commentCallbackFunction); //--- Page-specific function to do what we want when the node is found. function commentCallbackFunction (jNode) { jNode.text ("This comment changed by waitForKeyElements()."); } */ function waitForKeyElements( selectorTxt, /* Required: The selector string that specifies the desired element(s). */ actionFunction, /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */ waitOnce, /* Optional: If false, will continue to scan for new elements even after the first match is found. */ iframeSelector /* Optional: If set, identifies the iframe to search. */ ) { const dataAttr = 'data-wait-for-elements-found'; var targetNodes, targetsFound; if (typeof iframeSelector == "undefined") { var nodes = document.querySelectorAll(selectorTxt); targetNodes = nodes ? [...nodes] : null; } else { // TODO: CG - test iframes, I currently have no use for this // targetNodes = $(iframeSelector).contents() // .find(selectorTxt); } if (targetNodes && targetNodes.length > 0) { targetsFound = true; /*--- Found target node(s). Go through each and act if they are new. */ targetNodes.forEach((node) => { if (!node.getAttribute(dataAttr)) { //--- Call the payload function. var cancelFound = actionFunction(node); if (cancelFound) { targetsFound = false; } else { node.setAttribute(dataAttr, true); } } }) } else { targetsFound = false; } //--- Get the timer-control variable for this selector. var controlObj = waitForKeyElements.controlObj || {}; var controlKey = selectorTxt.replace(/[^\w]/g, "_"); var timeControl = controlObj[controlKey]; //--- Now set or clear the timer as appropriate. if (targetsFound && waitOnce && timeControl) { //--- The only condition where we need to clear the timer. clearInterval(timeControl); delete controlObj[controlKey] } else { //--- Set a timer, if needed. if (!timeControl) { timeControl = setInterval(function () { waitForKeyElements(selectorTxt, actionFunction, waitOnce, iframeSelector ); }, 300 ); controlObj[controlKey] = timeControl; } } waitForKeyElements.controlObj = controlObj; }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址