Мое расширение Firefox для вставки CSS не будет работать - PullRequest
2 голосов
/ 29 февраля 2012

Я занят разработкой расширения для Firefox. Я использую Add-on Builder

Что он будет делать:

  1. Получить идентификатор со страницы PHP (XMLHttpRequest)

  2. Вызовите другую функцию и отправьте этот идентификатор вместе с ней

  3. Эта функция вставляет CSS с тегом ссылки, созданным javascript

Моя проблема:

Это не сработает. Если я сообщу текущую переменную темы, ничего не произойдет. Таким образом, XMLHttpRequest не работает.

Мой код:

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. Файл CSS находится в папке данных.

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Я очень новичок в этом, поэтому не уверен, что смогу помочь.Вы смотрели в консоли ошибок (Ctrl + Shift + J), если он жалуется на что-нибудь?Вы можете console.log (), и он будет показан здесь.

Возможно, используйте Запрос lib вместо XMLHttpRequest

Вот фрагмент из моего кода:

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

}
1 голос
/ 01 марта 2012

Сценарии содержимого выполняются с привилегиями той страницы, на которой они находятся. Поэтому, если странице не разрешено загружать http://localhost/, ваш сценарий содержимого также не сможет это сделать. Вы не получите немедленную ошибку из-за CORS , но запрос все равно не будет выполнен. Вам нужно отправить сообщение на main.js, чтобы он выполнил запрос (добавочный код может запрашивать любой URI) и отправил данные обратно в скрипт содержимого.

0 голосов
/ 12 марта 2012

Как уже говорилось, у скрипта контента есть те же привилегии, что и у веб-страницы, к которой он присоединен, это означает, что вы находитесь под Одинаковой политикой происхождения .

. Вы можете решить эту проблему.как было предложено, отправьте сообщение в код дополнения (которое не ограничено SOP) и опубликуйте результат обратно в сценарий содержимого.

Вот пример того, как может выглядеть код: https://groups.google.com/d/topic/mozilla-labs-jetpack/VwkZxd_mA7c/discussion

...