2015-10-12 4 views
0

У меня есть следующий упрощенный код:Firefox расширение - ошибка: вызов функции() блокируется ПСУ

main.js:

var data = require("sdk/self").data; 
var tabs = require("sdk/tabs"); 

tabs.on('ready', function(tab) { 
    console.log("start"); 
    let worker = tab.attach({ 
     contentScriptFile: [ 
     data.url("jquery.min.js"), 
     data.url("test.js") 
     ], 
    }); 
    worker.port.emit("start", data.load("popups/start.html")); 
    console.log("end"); 
}); 

test.js:

console.log("test.js"); 

self.port.on("start", function (content) { 
    console.log("I get the message"); 
    $('body').append(content); 
}); 

Проблема: Это работает как раз ne, и в большинстве случаев все в порядке. В только один веб-сайт и, в частности, в хорошо известный github.com, он производит следующее сообщение об ошибке:

console.log: test: start 
console.log: test: end 
console.error: 
    Message: Error: call to Function() blocked by CSP 
console.error: 
    Message: TypeError: this.sandbox is undefined 
    Stack: 
    [email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/content/worker-child.js:75:7 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/event/core.js:112:9 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/event/core.js:89:38 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/remote/child.js:54:38 

Примечание 1: Проблема с обменом сообщения start. Но почему он работает везде, кроме github.com/*?

Примечание 2: Я использую cfx, с jpm он отлично работает. Есть ли способ исправить это или мне нужно обновить расширение для работы с jpm?

ответ

1

cfx, вероятно, включает в себя старую версию SDK, а jpm работает со встроенной версией браузера. Попробуйте запустить с --strip-sdk.

Тем не менее, cfx устарел, вы должны использовать jpm.


Github использует CSP directives блокировать небезопасное выполнение скрипта, включая eval и new Function(), многие другие сайты не делают.

Новые версии SDK инициализируют изолированную песочницу аддонов по-разному, поэтому CSP не подвержены влиянию.

+0

Спасибо за ваш ответ, и это очень полезно. Но он отвечает только на «примечание 2». Есть ли у вас какие-либо идеи относительно «примечания 1»? Я хочу не только исправить проблему, но и понять, почему ее производят. Сделайте свой ответ более наглядным, это поможет мне лучше понять проблему. –

+0

Вы не должны замаскировать вопросы как сноску. – the8472

+0

Извините за сноски и еще раз спасибо за ваше редактирование. –

Смежные вопросы