6

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" 
    ] 
    } 
+1

Si può provare [fetch] (https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch). –

+1

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

+0

Funziona anche dall'interno dell'estensione Web, era qualcosa a che fare con l'URL delle autorizzazioni stesso – tommed

risposta

4

Il problema era l'URL delle autorizzazioni specificato. Ho cambiato il sottodominio in un asterisco e il protocollo in un asterisco e sembrava funzionare dopo.

+2

Potrebbe essere utile installare il componente aggiuntivo HTTP Live Headers, abilitare tutte le caselle di controllo e vedere cosa viene effettivamente caricato. Sta cambiando il protocollo da http a https? Cambiare sottodomini sub1.dom.tld sub2.dom.tld sub3.dom.tld? – user314159

+0

user314159 ha ragione. Il mio caso è il reindirizzamento 302. Scoperto usando il violinista. – Dummy