6

Ich habe viele Beispiele zum Erstellen von XHR-Anfragen von Firefox-Add-ons gesehen, aber ich versuche, die neuen WebExtensions Sachen zu verwenden (wo require und Components sind undefined) und kann nicht zu sehen, warum Ich kann keine einfache XmlHttpRequest innerhalb der Erweiterung senden?XMLHttpRequest von Firefox WebExtension

Es ist erwähnenswert, dass die Ajax-Anfrage zu einer völlig anderen URL geht, aber der Host hat CORs gesetzt, um alle Ursprünge zuzulassen.

Sobald .send() abgefeuert wird erhalte ich die Fehlermeldung:

[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

Der Code sieht wie folgt aus:

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()); 
    } 
} 

ich webRequest Berechtigungen meiner manifest.json hinzugefügt haben, wird mir klar, dass ist es nicht, was es bedeutet, aber ich kämpfe um zu verstehen, was die Ajax-Anfrage stoppt? Irgendwelche Ideen?

{ 
    "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

Sie könnten [fetch] (https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch) versuchen. –

+1

Das ist interessant. XHR sollte von jeder Webseite funktionieren, solange Sie es von background.js oder popup.js machen, würde ich denken. – Noitidart

+0

Funktioniert auch von innerhalb der Web-Erweiterung, es hatte etwas mit der Berechtigung URL selbst zu tun – tommed

Antwort

4

Das Problem war die Berechtigungs-URL angegeben. Ich habe die Subdomain in ein Sternchen und das Protokoll in ein Sternchen geändert und es schien danach zu funktionieren.

+2

Lohnt sich möglicherweise installieren Live HTTP Header Add-on, aktivieren Sie alle Kontrollkästchen, und sehen, was tatsächlich geladen wird. Ist das Protokoll von HTTP zu HTTPS? Unterdomänen wechseln sub1.dom.tld sub2.dom.tld sub3.dom.tld? – user314159

+0

user314159 ist richtig. Mein Fall ist 302 Redirect. Entdeckt mit Fiddler. – Dummy

Verwandte Themen