GM_xmlhttpRequest 的 Promise 封装,并增加 retry 功能
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greasyfork.org/scripts/565272/1749537/GM_request.js
(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;
})();