如何在Firefox Add-on SDK(Jetpack)中更改文本框的值?

时间:2011-05-20 22:55:02

标签: firefox firefox-addon 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的范围,也不能在'onMessage'中获得'node'。以前版本的附加SDK过去非常容易,这次非常困难(或者至少非常不直观)。

1 个答案:

答案 0 :(得分:0)

如果你不能在你的内容脚本中包含整个函数(你可以将你的函数放在一个单独的文件中,如果它使这更容易),那么你可以将一条消息发回到你的内容脚本,虽然这需要一个函数内部您的内容脚本以接收消息。请参阅Working with Content Scripts