Mon extension Firefox pour injecter CSS ne fonctionnera pas

Je suis occupé à développer une extension Firefox. J'utilise le générateur de complément

Ce qu'il fera:

  1. Obtenir une ID à partir d'une page PHP (XMLHttpRequest)

  2. Appelez une autre fonction et envoyez cette ID avec elle

  3. Cette fonction insère CSS avec une étiquette de lien créée par javascript

Mon problème:

Cela ne fonctionnera pas. Si j'indique la variable actuelle, rien ne se produit. Donc 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 se trouve dans le dossier de données.

Les scripts de contenu sont exécutés 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 ne recevez pas une erreur immédiate en raison de CORS mais la demande échouera néanmoins. Ce que vous devez faire, c'est envoyer un message à main.js afin qu'il fasse la demande (le code d'extension est autorisé à demander un URI) et envoie les données au script de contenu.

Je suis très nouveau à ce sujet, mais je ne sais pas si je peux vous aider. Avez-vous regardé dans la console d'erreur (ctrl + shift + j) si elle se plaignait de quelque chose? Vous pouvez console.log () et il apparaîtra ici.

Peut-être utiliser la demande de 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 indiqué, le script de contenu a le même privilège de la page Web où est joint, cela signifie que vous êtes sous la même Politique d'origine .

Vous pouvez résoudre le problème comme suggéré, ainsi envoyé un message au code add-on (qui n'est pas restreint par le SOP) et publier le résultat dans le script de contenu.

Voici un exemple de la façon dont le code pourrait être: https://groups.google.com/d/topic/mozilla-labs-jetpack/VwkZxd_mA7c/discussion