using fetch based on GM.xmlHttpRequest
in userscript.
Don't forget to add @grant GM.xmlHttpRequest
and @connect
in your metadata
It's not 100% same with fetch API because some security limit like cors site request doesn't exist on GM.xmlHttpRequest
.
And AbortSignal
is not supported very well due to the limitation of GM.xmlHttpRequest
.
You can set some HTTP headers allowed by GM.xmlHttpRequest
but not allowed by standard fetch API.
add this script to UserScript manager and visit https://example.com/
// ==UserScript==
// @name new user script
// @version 0.0.1
// @match https://example.com/*
// @grant GM.xmlHttpRequest
// @require https://cdn.jsdelivr.net/npm/@trim21/gm-fetch
// @run-at document-end
// @connect httpbin.org
// ==/UserScript==
(async () => {
const res = await GM_fetch("https://httpbin.org/headers", { method: "GET" });
const data = await res.json();
console.log(data);
})();
(you can't use @require https://cdn.jsdelivr.net/npm/@trim21/gm-fetch
directly if you want to upload your script to GreasyFork,
you will need to specify version you want to use, for example @require https://cdn.jsdelivr.net/npm/@trim21/gm-fetch@0.1.15
)
ES Module:
import GM_fetch from "@trim21/gm-fetch";
CommonJS (not recommended):
const GM_fetch = require("@trim21/gm-fetch");
This package is using Request
and Response
class, it so requires a browser with fetch API support.
https://caniuse.com/?search=Blob.stream
MIT