作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以告诉我代码有什么问题吗?在这里,我想在单击上下文菜单时向网页发送 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/
我是一名优秀的程序员,十分优秀!