#firefox-addon
#firefox-addon
Вопрос:
Я пытаюсь использовать этот код:
// This is an active module of the goelvivek (10) Add-on
// This is an active module of the goelvivek (9) Add-on
var pageMod = require("page-mod");
var request = require('request');
pageMod.PageMod({
include: "*",
contentScriptWhen: "end",
contentScript: 'var doc_c=document.title;console.log(doc_c);var body_uri=document.URI;self.postMessage(body_uri);',
onAttach:function(body_c){
console.log("onattach");
var req = request.Request({
url:"http://google.com",
content:{
v:"1",
body:body_c
},
oncomplete: function (response){
console.log(response);
}
});
req.get();
}
});
но Firefox терпит крах. Почему?
вы можете протестировать дополнение на https://builder.addons.mozilla.org/addon/1021520/latest /
Комментарии:
1. Вы отправили отчет о сбое? Смотрите support.mozilla.com/en-US/kb / …
2. crash-stats.mozilla.com/report/index/…
3. но я получаю сообщение об ошибке, что мы не смогли найти нужный вам OOID. Если вы недавно отправили этот сбой, он все еще может быть в очереди. Если вы считаете, что это сообщение является ошибкой, пожалуйста, отправьте запрос на Bugzilla с описанием произошедшего и, пожалуйста, укажите URL-адрес этой страницы.
4. но я не понимаю, почему этот код приведет к сбою браузера: (
Ответ №1:
Это не сбой для меня в последнее время каждую ночь. Вместо этого он потребляет много памяти и зависает до тех пор, пока не появится диалоговое окно скрипта, не отвечающее на запросы.
Причина зависания в том, что вы ожидали, что body_c
параметром onAttach
будет сообщение из скрипта содержимого, но это рабочий объект с множеством вложенных ссылок, возможно, даже с циклическими.
В SDK Request
есть этот код для преобразования объекта, переданного как content
, в строку перед отправкой в запрос. Предполагается, что он должен рекурсивно обходить объект, и, по-видимому, он блокирует рабочий объект, который вы передали.
Комментарии:
1. Нужно добавить только одно: вместо попытки отправить
onAttach
параметр, который это расширение должно вызыватьworker.on("message", function(data) {...})
там, как указано во втором примере «Взаимодействие со скриптами содержимого». Тогда этот обратный вызов фактически получит сообщение от сценария содержимого.