waitForElement

Waits for an element using the MutationObserver API

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/528234/1596455/waitForElement.js

  1. // ==UserScript==
  2. // @name waitForElement
  3. // @namespace Violentmonkey Scripts
  4. // @version 2.0
  5. // @description Waits for an element using the MutationObserver API
  6. // @author maanimis
  7. // @grant none
  8. // ==/UserScript==
  9. /**
  10. * Waits for a element of a given selector.
  11. *
  12. * @param {string} selector
  13. * @returns {Promise<HTMLElement>}
  14. */
  15. function waitForElement(selector) {
  16. return new Promise((resolve) => {
  17. // Ensure <body> is ready
  18. function ensureBodyReady(callback) {
  19. if (document.body) return callback();
  20. requestAnimationFrame(() => ensureBodyReady(callback));
  21. }
  22.  
  23. ensureBodyReady(() => {
  24. const ELEMENT = document.querySelector(selector);
  25. if (ELEMENT) return resolve(ELEMENT);
  26.  
  27. console.log("can't find element for selector:", selector, "waiting...");
  28.  
  29. const observer = new MutationObserver(() => {
  30. const ELEMENT = document.querySelector(selector);
  31. if (ELEMENT) {
  32. console.log("element found!!");
  33. resolve(ELEMENT);
  34. observer.disconnect();
  35. }
  36. });
  37.  
  38. observer.observe(document.body, {
  39. childList: true,
  40. subtree: true,
  41. });
  42. });
  43. });
  44. }