Question

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

Ce qu'il fera:

  1. Obtenez un ID à partir d'une page PHP (XMLHTTPREQUEST)

  2. Appelez une autre fonction et envoyez cet identifiant avec

  3. 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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top