Как изменить значение текстового поля в Firefox Add-on SDK (Jetpack)?

#firefox #firefox-addon #firefox-addon-sdk

#firefox #firefox-дополнение #firefox-addon-sdk

Вопрос:

Я пытаюсь изменить содержимое текстового поля (используя последнюю версию Add-on SDK, 1.05b). Я могу получить его содержимое, но я не смог выяснить, как я могу его изменить. Вот соответствующая часть моего кода:

 var deasciifyItem = contextMenu.Item({
  label: "Label",
  context: contextMenu.SelectorContext("input[type=text], textarea"),
  contentScript: 'self.on("click", function (node) {'  
                 'var text = node.value;'  
                  'self.postMessage(text);'  
                  '});',

  onMessage: function(text) {
    if (text.length == 0) {
      throw ("Text to convert must not be empty!");
    }

    console.log(text);
    console.log(someMyFunction(text));
    text = "A computed new value to replace the old value in text box!";
   }
  });
  

Я могу прочитать содержимое любого текстового поля и записать его в консоль, но как я могу изменить его содержимое, например, node.value, передав node.value функции, которую я определил? Я пытался передать node.value в качестве параметра функции self.postMessage, но это не работает. Чего я пытаюсь достичь, так это чего-то вроде:

        node.value = someMyFunction(node.value);
  

Я также пытался сделать это внутри

      ' node.value = someMyFunction(node.value); '   ...
  

часть но затем говорится, что someMyFunction не определена в этом контексте (я знаю, что она определена, потому что я тестировал это

   console.log(someMyFunction(text)); 
  

работает).

Я застрял на этом этапе. Есть какие-нибудь советы? Я не могу ни принудительно ввести someMyFunction в область contentScript, ни получить ‘node’ в ‘onMessage’. То, что раньше было очень просто в предыдущих версиях Add-on SDK, на этот раз оказалось очень сложным (или, по крайней мере, неинтуитивным).

Комментарии:

1. У меня точно такая же проблема — все, что вы передаете из своего скрипта содержимого в свой onMessage обработчик, получает JSONified. Вы даже не можете отправить сообщение обратно в content script, потому что там нет port свойства, как в других «рабочих» утилитах дополнения.

2. смотрите отчет об ошибке bugzilla.mozilla.org/show_bug.cgi?id=824348

Ответ №1:

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

Комментарии:

1. Насколько мне известно, это неверно. В настоящее время нет способа отправить сообщение обратно в сценарий содержимого, связанный с контекстным меню, как описано в OP.