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

이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @require https://update.greasyfork.org/scripts/511024/1751703/Simple%20WaitForKeyElement.js을(를) 사용하여 포함하는 라이브러리입니다.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==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);
        }
    });
}