如何在 Mozilla 插件中调用用户函数

How to call user function in Mozilla Addon?

本文关键字:调用 用户 函数 插件 Mozilla      更新时间:2023-09-26

有人能告诉我代码出了什么问题吗?在这里,我想在单击上下文菜单时将POst请求发送到网页。发布数据将是单击的 URL。

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
});

这里的问题是,sendRequest 没有在上下文菜单中为 contentScript 定义。您必须使用消息传递功能 (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 发送的,顺便说一下,该方法不支持对对象进行结构化克隆,或者换句话说,如果您将整个节点与消息一起发送,它将在接收端被破坏(另请参阅 https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/using_postMessage(。由于您似乎只想要 href 属性,我直接发送它。