如何在Mozilla Addon中调用用户功能?

时间:2015-03-30 16:35:30

标签: javascript firefox firefox-addon firefox-addon-sdk

有人可以告诉我代码有什么问题。在这里,我想在单击上下文菜单时将POst请求发送到网页。发布数据将是点击的网址。

var buttons = require('sdk/ui/button/action');
var tabs = require("sdk/tabs");
var cm = require("sdk/context-menu");
var Request = require('sdk/request').Request;
var self = require("sdk/self");


function sendRequest(turl) {
    Request({url: 'myurl.com',content: {data: turl},onComplete: function (response) {console.log(response.text);}}).post();
};

var script = "self.on('click', function (node, data) {" +
             "sendRequest(node);" +
             "});";

cm.Item({
  label: "Save To nbojanapu",
context: cm.SelectorContext("a"),
contentScript: script

});

1 个答案:

答案 0 :(得分:1)

这里的问题是,没有为上下文菜单中的contentScript定义sendRequest。您必须使用消息传递功能(https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/context-menu#message

var script = "self.on('click', function(node, data) {" +
             "  self.postMessage(node.href);" +
             "});";

cm.Item({
  label: "Save to nbojanapu",
  context: cm.SelectorContext("a"),
  contentScript: script,
  onMessage: sendRequest
});

因此,不是直接在contentScript中调用sendRequest,而是在消息事件处理程序中调用它(我直接在项目的构造函数中附加)。使用self.postMessage方法从contentScript发送消息,顺便说一下,该方法不支持创建Object的结构化克隆,换句话说,如果您发送整个节点的消息,它将是在接收端断开(另见https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/using_postMessage)。由于您似乎只想要href属性,我只是直接发送它。