我正在尝试更改文本框的内容(使用最新版本的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的范围,也不能在'onMessage'中获得'node'。以前版本的附加SDK过去非常容易,这次非常困难(或者至少非常不直观)。
答案 0 :(得分:0)
如果你不能在你的内容脚本中包含整个函数(你可以将你的函数放在一个单独的文件中,如果它使这更容易),那么你可以将一条消息发回到你的内容脚本,虽然这需要一个函数内部您的内容脚本以接收消息。请参阅Working with Content Scripts。