如何在 Mozilla 插件中调用用户函数
How to call user function in Mozilla Addon?
有人能告诉我代码出了什么问题吗?在这里,我想在单击上下文菜单时将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 属性,我直接发送它。
相关文章:
- 同步调用,直到用户通过angular验证为访问者
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- Can用户'MediaWiki上的自定义JavaScript调用Lua模块
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 如何在 Mozilla 插件中调用用户函数
- 如何在视图中保存用户输入内容,并在离开页面时对控制器进行后期调用
- 每次用户键入时调用函数
- 提示用户通过AJAX调用保存文件
- 如何通过ajax调用将用户重定向到页面
- 调用按钮单击事件 ajax 加载的用户控件
- 如何通过声云 api 调用获取用户 ID
- 防止客户端滥用/欺骗奖励用户的重复 Ajax 调用
- Ajax 调用在 IOS 中的用户交互之前不起作用
- 如何在没有JQuery的情况下,通过对服务器的基本ajax调用,根据浏览器上的用户活动保持服务器会话活动
- 从 aspx 页调用用户控件中的 jquery 函数
- 输入类型=文件onchange事件获胜't在调用用户定义函数时激发
- 如何从一个Javascript函数调用用户控件
- jQuery在函数中调用用户定义的函数