waitForElement

Waits for an element using the MutationObserver API

Dette scriptet burde ikke installeres direkte. Det er et bibliotek for andre script å inkludere med det nye metadirektivet // @require https://updategreasyfork.deno.dev/scripts/528234/1596455/waitForElement.js

// ==UserScript==
// @name         waitForElement
// @namespace    Violentmonkey Scripts
// @version      2.0
// @description  Waits for an element using the MutationObserver API
// @author       maanimis
// @grant        none
// ==/UserScript==
 
/**
 * Waits for a element of a given selector.
 *
 * @param {string} selector
 * @returns {Promise<HTMLElement>}
 */
 function waitForElement(selector) {
  return new Promise((resolve) => {
    // Ensure <body> is ready
    function ensureBodyReady(callback) {
      if (document.body) return callback();
      requestAnimationFrame(() => ensureBodyReady(callback));
    }

    ensureBodyReady(() => {
      const ELEMENT = document.querySelector(selector);
      if (ELEMENT) return resolve(ELEMENT);

      console.log("can't find element for selector:", selector, "waiting...");

      const observer = new MutationObserver(() => {
        const ELEMENT = document.querySelector(selector);
        if (ELEMENT) {
          console.log("element found!!");
          resolve(ELEMENT);
          observer.disconnect();
        }
      });

      observer.observe(document.body, {
        childList: true,
        subtree: true,
      });
    });
  });
}