w84Kel

Permet de se déclencher à l'arrivée d'un élément sur une page.

目前为 2020-01-06 提交的版本。查看 最新版本

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/394721/763605/w84Kel.js

// ==UserScript==
// @name         w84Kel
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Permet de se déclencher à l'arrivée d'un élément sur une page.
// @author       CoStiC
// @include        *://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    /*--- waitForKeyElements():  A utility function, for Greasemonkey scripts,
that detects and handles AJAXed content. Forked for use without JQuery.
Usage example:
    waitForKeyElements (
        "div.comments"
        , commentCallbackFunction
    );
    //--- Page-specific function to do what we want when the node is found.
    function commentCallbackFunction (element) {
        element.text ("This comment changed by waitForKeyElements().");
    }
IMPORTANT: Without JQuery, this fork does not look into the content of
iframes.
*/
    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. */
     bWaitOnce /* Optional: If false, will continue to scan for new elements even after the first match is found. */
    ) {
        var targetNodes, btargetsFound;
        targetNodes = document.querySelectorAll(selectorTxt);

        if (targetNodes && targetNodes.length > 0) {
            btargetsFound = true;
            /*--- Found target node(s).  Go through each and act if they are new.*/
            targetNodes.forEach(function (element) {
                var alreadyFound = element.dataset.found == 'alreadyFound' ? 'alreadyFound' : false;

                if (!alreadyFound) {
                    //--- Call the payload function.
                    var cancelFound = actionFunction(element);
                    if (cancelFound) btargetsFound = false; else element.dataset.found = 'alreadyFound';
                }
            });
        } else {
            btargetsFound = 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 (btargetsFound && bWaitOnce && 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,
                                       bWaitOnce
                                      );
                },
                                          300
                                         );
                controlObj[controlKey] = timeControl;
            }
        }
        waitForKeyElements.controlObj = controlObj;
    }

})();