【问题标题】:Opening a new tab from the context menu in Firefox Add-on SDK在 Firefox Add-on SDK 的上下文菜单中打开一个新选项卡
【发布时间】:2015-11-08 03:42:08
【问题描述】:

在阅读了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
});

【问题讨论】:

  • firefox web 扩展 - developer.mozilla.org/en-US/Add-ons/WebExtensions/API 是否支持足够的 chrome web 扩展 API 以使您几乎无需修改即可使用 chrome 扩展?老实说,我还不确定 Firefox 的发布版本中是否提供了 Firefox 网络扩展,但这只是一个想法
  • @JaromandaX,我确实注意到 WebExtensions API 即将推出,但我没有仔细阅读。

标签: javascript firefox firefox-addon firefox-addon-sdk


【解决方案1】:

在 contextMenu 脚本中你 self.postMessage uri

然后在menuItemonMessage函数中打开标签

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',

注意路径中data缺少

那个语法,

contentScriptFile: './filename.js'

是一个快捷方式

contentScriptFile: self.data.url("filename.js")

jpm SDK 早期版本的语法是什么

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多