kiv-lib

Helper functions

目前为 2023-10-17 提交的版本。查看 最新版本

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

  1. const waitFor = async (target, selector) => {
  2. return new Promise(resolve => {
  3. if (target.querySelector(selector)) {
  4. return resolve(target.querySelector(selector));
  5. }
  6. const observer = new MutationObserver(mutations => {
  7. if (target.querySelector(selector)) {
  8. resolve(target.querySelector(selector));
  9. observer.disconnect();
  10. }
  11. });
  12. observer.observe(document.body, {
  13. childList: true,
  14. subtree: true
  15. });
  16. });
  17. };
  18.  
  19. const gmGet = (url, cache_key) => {
  20.  
  21. if (cache_key) {
  22. const cachedData = localStorage.getItem(cache_key);
  23. const cachedTimestamp = parseInt(localStorage.getItem(cache_key + "_timestamp"));
  24. if (cachedData && cachedTimestamp && (Date.now() - cachedTimestamp) < 60 * 60 * 1000) {
  25. return JSON.parse(cachedData);
  26. }
  27. }
  28.  
  29. return new Promise((resolve, reject) => {
  30. GM.xmlHttpRequest({
  31. url,
  32. method: "GET",
  33. onload: (response) => {
  34. resolve(new Response(response.response, { statusText: response.statusText, status: response.status }));
  35. },
  36. onerror: (error) => {
  37. reject(error);
  38. }
  39. });
  40. })
  41. .catch((error) => {
  42. throw { message: "critical error", code: error.status };
  43. })
  44. .then((response) => {
  45. const result = response.json();
  46. return result.then((body) => {
  47. if (typeof body.error == 'undefined') {
  48. if (cache_key) {
  49. localStorage.setItem(cache_key, JSON.stringify(body));
  50. localStorage.setItem(cache_key + "_timestamp", Date.now());
  51. }
  52. return body;
  53. } else {
  54. throw { message: body.error.error, code: body.error.code };
  55. }
  56. });
  57. });
  58. };