Ho visto un sacco di esempi di creazione di richieste XHR da Firefox Add-ons, ma sto cercando di utilizzare il nuovo WebExtensions roba (dove require
e Components
sono indefinita) e non riesco a capire perché Non riesco a inviare una semplice XmlHttpRequest dall'interno?XMLHttpRequest da Firefox WebExtension
Vale la pena notare che la richiesta ajax sta per un URL completamente diverso, ma l'host ha CORs impostato per consentire tutte le origini.
Appena .send()
è sparato ottengo l'errore:
[Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: resource://gre/modules/ExtensionContent.jsm -> moz-extension://9ca18411-9a95-4fda-8184-9dcd3448a41a/myapp.js :: GM_xmlhttpRequest :: line 162" data: no]"1 whatsapp.js:166:9
Il codice è simile al seguente:
function GM_xmlhttpRequest(orders) {
try {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", function(a1, a2, a3) {
console.log('xhr.load: %s, %s, %s', a1, a2, a3);
});
// open synchronously
oReq.open(orders.method, orders.url, false);
// headers
for (var key in orders.headers) {
oReq.setRequestHeader(key, orders.headers[key]);
}
// send
var res = oReq.send(orders.data);
console.log('xhr result: %s', res);
} catch(e) {
debugger;
console.warn('could not send ajax request %s to %s, reason %s', orders.method, orders.url, e.toString());
}
}
ho aggiunto i permessi webRequest al mio manifest.json, mi rendo conto che non è quello che significa, ma sto lottando per capire cosa sta fermando la richiesta di ajax? Qualche idea?
{
"manifest_version": 2,
"name": "MyApp",
"version": "1.0",
"description": "TestXHR",
"icons": {
"48": "icons/myapp-48.png"
},
"applications": {
"gecko": {
"id": "[email protected]",
"strict_min_version": "45.0"
}
},
"content_scripts": [
{
"matches": ["*://web.myapp.com/*"],
"js": ["myapp.js"]
}
],
"permissions": [
"https://thehost.all-xhr-sent-here.net/*",
"webRequest"
]
}
Si può provare [fetch] (https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch). –
Questo è interessante. XHR dovrebbe funzionare come fa da qualsiasi pagina web, a patto che tu lo faccia da background.js o popup.js, penserei. – Noitidart
Funziona anche dall'interno dell'estensione Web, era qualcosa a che fare con l'URL delle autorizzazioni stesso – tommed