Simple WaitForKeyElement

Library that Exports my simplified vanilla JS version of WaitForKeyElement, which is a simple async function that returns a Promise that resolves to an element by a given selector, when that element is found

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.greasyfork.org/scripts/511024/1751703/Simple%20WaitForKeyElement.js

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

Advertisement:

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

Advertisement:

// ==UserScript==
// @name        Simple WaitForKeyElement
// @license     Unlicense
// @namespace   1N07
// @match       *://*/*
// @version     1.1.0
// @author      1N07
// @description Library that Exports my simplified vanilla JS version of WaitForKeyElement, which is a simple async function that returns a Promise that resolves to an element by a given selector, when that element is found
// ==/UserScript==

async function WaitForKeyElement(selector, timeout) {
    return new Promise((resolve, reject) => {
        let el = document.querySelector(selector);
        if (el) {
            resolve(el);
            return;
        }
        new MutationObserver((mutationRecords, observer) => {
            el = document.querySelector(selector);
            if (el) {
                resolve(el);
                observer.disconnect();
            }
        }).observe(document.documentElement, { childList: true, subtree: true });
        if (timeout) {
            setTimeout(() => {
                reject(`WaitForKeyElement: "${selector}" timed out`);
            }, timeout);
        }
    });
}

async function WaitForKeyElementOnDocument(doc, selector, timeout) {
    return new Promise((resolve, reject) => {
        let el = doc.querySelector(selector);
        if (el) {
            resolve(el);
            return;
        }
        new MutationObserver((mutationRecords, observer) => {
            el = doc.querySelector(selector);
            if (el) {
                resolve(el);
                observer.disconnect();
            }
        }).observe(doc.documentElement, { childList: true, subtree: true });
        if (timeout) {
            setTimeout(() => {
                reject(`WaitForKeyElement: "${selector}" timed out`);
            }, timeout);
        }
    });
}