#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.