您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A utility function, for Greasemonkey scripts, that detects and handles dynamic content.
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/482702/1298826/Wait%20for%20key%20element.js
- // ==UserScript==
- // @name Wait for key element
- // @namespace http://tampermonkey.net/
- // @version 0.2
- // @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或关注我们的公众号极客氢云获取最新地址