Mon extension Firefox pour injecter CSS ne fonctionnera pas
-
14-11-2019 - |
Question
Je suis occupé à développer une extension Firefox. J'utilise le générateur complémentaire
Ce qu'il fera:
Obtenez un ID à partir d'une page PHP (XMLHTTPREQUEST)
Appelez une autre fonction et envoyez cet identifiant avec
Cette fonction insère CSS avec une balise de liaison créée par JavaScript
Mon problème:
Cela ne fonctionnera pas. Si j'alerte la variable CurrentTheme, rien ne se passe. Ainsi, le XMLHttpRequest ne semble pas fonctionner.
Mon code:
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();
PS Le fichier CSS est dans le dossier de données.
La solution
Les scripts de contenu s'exécutent avec les privilèges de la page dans lesquels ils se trouvent. Donc, si la page n'est pas autorisée à charger http://localhost/
, votre script de contenu ne pourra pas non plus le faire. Vous n'obtenez pas d'erreur immédiate en raison de Cors Mais la demande échouera néanmoins. Ce que vous devez faire est d'envoyer un message à main.js
afin qu'il fasse la demande (le code d'extension est autorisé à demander n'importe quel URI) et renvoie les données au script de contenu.
Autres conseils
Je suis très nouveau à cela, donc je ne sais pas si je peux aider. Avez-vous jeté un coup d'œil dans la console d'erreur (Ctrl + Shift + J) si elle se plaigne de quelque chose? Vous pouvez console.log () et il se présentera ici.
Peut-être utiliser le Demande lib au lieu de xmlhttprequest
Voici un extrait de mon code:
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();
}
Comme dit, le script de contenu a le même privilège de la page Web où est attaché, c'est-à-dire que vous êtes sous le Même politique d'origine.
Vous pouvez résoudre le problème comme suggéré, donc envoyé un message au code complémentaire (qui n'est pas limité par le SOP) et publier le résultat au script de contenu.
Ici, un exemple comment le code pourrait être: https://groups.google.com/d/topic/mozilla-labs-jetpack/vwkzxd_ma7c/discussion