GM_request

GM_xmlhttpRequest 封装

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

Advertisement:

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

Advertisement:

(function () {
  function GM_request(details) {
    const {
      onload,
      onerror,
      onretry,
      maxRetries,
      currentRetry = 0,
      ...other
    } = details;
    return new Promise((resolve, reject) => {
      GM_xmlhttpRequest({
        onload(response) {
          if (response.status >= 200 && response.status < 300) {
            resolve(response);
          } else {
            reject(
              new Error(
                `Request failed with status ${response.status}: ${response.responseText}`,
              ),
            );
          }
          onload?.(response);
        },
        onerror(error) {
          reject(error);
        },
        ...other,
      });
    }).catch((error) => {
      if (maxRetries && currentRetry < maxRetries) {
        const retryDetails = {
          ...details,
          currentRetry: currentRetry + 1,
        };
        onretry?.(retryDetails);
        return GM_request(retryDetails);
      } else {
        onerror?.(error);
        return Promise.reject(error);
      }
    });
  }
  window.GM_request = GM_request;
})();