GM_xmlhttpRequest 的 Promise 封装,并增加 retry 功能
Этот скрипт недоступен для установки пользователем. Он является библиотекой, которая подключается к другим скриптам мета-ключом // @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;
})();