在阅读these两个sites后,我无法从上下文菜单中获取一段JS代码。
index.js:
var self = require('sdk/self');
var contextMenu = require("sdk/context-menu");
var uri = "";
var script = 'self.on("click", function (node, data) {' +
'var uri = "http://test.net/?blee=" + node.href + "blue=true";' +
'console.log(uri);'+
'tabs.open(uri);'+
'});';
var tabs = require('sdk/tabs');
var menuItem = contextMenu.Item({
label: "label",
context: contextMenu.SelectorContext("a[href]"),
contentScript: script,
onMessage: function (data) {
console.log(data);
}
});`
整个扩展程序就在那里,奇怪的是它将var uri
输出到控制台,但它在tabs.open(uri)
失败了。 tabs.open
应该在函数内部而不是这个笨拙的脚本吗?
我试图为firefox编写我的chrome扩展程序来完成同样的事情。这是Chrome扩展程序
中的代码main.js:
runFunction= function(word){
var query = word.linkUrl;
chrome.tabs.create({url: "http://test.net/?blee=" + query + "&blue=True"});
};
chrome.contextMenus.create({
title: "Title!",
contexts:["link"],
onclick: runFunction
});
答案 0 :(得分:3)
在contextMenu脚本中,self.postMessage
uri
然后打开menuItem onMessage
函数
var self = require('sdk/self');
var contextMenu = require("sdk/context-menu");
var uri = "";
var script = 'self.on("click", function (node, data) {' +
'var uri = "http://test.net/?blee=" + node.href + "blue=true";' +
'console.log(uri);'+
'self.postMessage(uri);'+
'});';
var tabs = require('sdk/tabs');
var menuItem = contextMenu.Item({
label: "label",
context: contextMenu.SelectorContext("a[href]"),
contentScript: script,
onMessage: function (data) {
tabs.open(data);
}
});
如果上下文菜单的脚本变得很麻烦,请将其放在扩展程序的data
文件夹中的文件中 - 它必须是data
文件夹
例如,如果它的名称为data/contextScript.js
,则代替
contentScript: script,
使用
contentScriptFile: './contextScript.js',
请注意路径
中{strong>缺少data
那句法,
contentScriptFile: './filename.js'
是
的快捷方式contentScriptFile: self.data.url("filename.js")
早期版本的jpm SDK
的语法是什么