La mia estensione di firefox per iniettare CSS non funziona
-
14-11-2019 - |
Domanda
Sono occupato a sviluppare un'estensione di firefox.Sto usando il costruttore aggiuntivo
Cosa farà:
- .
-
Ottieni un ID da una pagina PHP (XMLHTTPRequest)
-
Chiama un'altra funzione e invia quell'ID con IT
-
Quella funzione inserisce CSS con un tag Link creato da JavaScript
Il mio problema:
Non funzionerà.Se avviso la variabile corrente, non succede nulla.Quindi XMLHTTPREQUEST non sembra funzionare.
Il mio codice:
main.js:
.var Widget = require("widget").Widget; var tabs = require('tabs'); exports.main = function() { var pageMod = require("page-mod"); var data = require("self").data; scriptFiles = data.url("s.js"); pageMod.PageMod({ include: "*.facebook.com", contentScriptWhen: 'ready', contentScriptFile: scriptFiles });
s.js
.function addCSS(theTheme) { var s = document.createElement('link'); s.type = 'text/css'; s.rel = 'stylesheet'; s.href = theTheme+'.css'; (document.head||document.documentElement).appendChild(s); } function getData() { client = new XMLHttpRequest(); try{ client.open('GET','http://localhost:8888/istyla/login/popuplogin/myaccount.php'); } catch (e){ alert( "error while opening " + e.message ); } client.onreadystatechange = function(){ if (client.readyState ==4){ user_data = client.responseText; window.user_data = user_data; var currenttheme = user_data; window.currenttheme = currenttheme; addCSS(currenttheme); } } client.send(null); } getData();
P.S.Il file CSS è nella cartella dati.
Soluzione
Gli script del contenuto vengono eseguiti con i privilegi della pagina che sono in. Quindi se la pagina non è consentita per caricare http://localhost/
, lo script di contenuti non sarà in grado di farlo.Non si ottiene un errore immediato a causa di Cors Ma la richiesta fallirà comunque.Ciò che devi fare è inviare un messaggio a main.js
in modo che la richiesta (codice di interno è possibile richiedere qualsiasi URI) e invia i dati allo script del contenuto.
Altri suggerimenti
sono molto nuovo a questo quindi non sicuro se posso aiutare.Hai dato un'occhiata nella console di errore (Ctrl + Shift + J) se si lamenta di qualsiasi cosa?Puoi console.log () e verrà visualizzato qui.
magari usa il Richiesta lib al posto di xmlhttprequest
Ecco uno snippet dal mio codice:
var Request = require("request").Request;
getUserDetails : function(userID, callback)
{
Request({
url: Proxy.remoteUrl,
content : {command:'getUser',UserID:userID},
onComplete: function(response) {callback(response.json)}
}).get();
}
. Come detto, lo script del contenuto ha lo stesso privilegiato della pagina web in cui è allegato, questo significa che sei sotto il Stessa politica di origine .
È possibile risolvere il problema come suggerito, ha inviato un messaggio al codice aggiuntivo (che non è limitato dal SOP) e pubblica il risultato nello script del contenuto.
Qui un esempio come il codice potrebbe essere: https://groups.google.com/d/topic/mozilla-labs-jetpack/vwkzxd_ma7c/discussion