gpt4 book ai didi

javascript - 如何在 Mozilla Addon 中调用用户函数?

转载 作者:行者123 更新时间:2023-11-28 00:27:25 25 4
gpt4 key购买 nike

有人可以告诉我代码有什么问题吗?在这里,我想在单击上下文菜单时向网页发送 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

});

最佳答案

这里的问题是,没有为上下文菜单中的 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 发送的,顺便说一句,该方法不支持创建对象的结构化克隆,或者换句话说,如果您使用消息发送整个节点,它将是在接收端损坏(另见https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/using_postMessage)。由于您似乎只需要 href 属性,因此我直接发送该属性。

关于javascript - 如何在 Mozilla Addon 中调用用户函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29351560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com