Firefox терпит крах при http-запросе с использованием addon

#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) {...}) там, как указано во втором примере «Взаимодействие со скриптами содержимого». Тогда этот обратный вызов фактически получит сообщение от сценария содержимого.