Firefox 插件:通过单击自定义菜单项打开新选项卡

问题描述 投票:0回答:1

我在background.js中使用以下代码添加了一个Firefox插件

browser.menus.create({
    id: "q-menu-item",
    title: "'%s' redirect",
    contexts: ["selection"],
});

browser.menus.onClicked.addListener((info, tab) => {
    console.log(info.selectionText);
    window.open("http://www.google.com/", '_blank').focus();
});

和manifest.json:

{
    "manifest_version": 2,
    "name": "add-on-q",
    "version": "1.0",
  
    "description": "Context menu item opens new tab",
  
    "background": {
      "scripts": ["background.js"]
    },

    "permissions": [
      "menus"
    ]

  }

当我安装插件并选择一些文本,然后右键单击时,我确实得到了预期的自定义菜单项。但是,当我单击它时,尽管所选文本已记录到控制台,但它不会按预期在地址“google.com”处打开新选项卡。我也想使用

window.location.href = 'http://www.google.com';
,但这也不起作用。

我已经阅读了很多 MDN 的相关文档,但对此感到非常困惑。一些指示将非常有用。

javascript firefox-addon firefox-addon-sdk
1个回答
0
投票

虽然扩展的后台上下文有一个

window
对象,但有几个方法不起作用。要从后台脚本对窗口或选项卡进行操作,请使用
browser.windows
browser.tabs
。所以不要使用类似的东西:

open( 'https://www.google.com/', '_blank' ).focus();

要创建一个新的焦点窗口,请使用以下内容:

browser.windows.create( {
  url: 'https://www.google.com'
} );

open
不同,
windows.create
绕过“隐私和安全”选项卡上的浏览器设置“阻止弹出窗口”以及“常规”选项卡上的浏览器设置“在选项卡中打开链接而不是新窗口”。它确实创建了一个新窗口。

要在当前窗口中创建新的活动选项卡,请使用以下内容:

browser.tabs.create( {
  url: 'https://www.google.com'
} );

这两种方法都不需要权限。

© www.soinside.com 2019 - 2024. All rights reserved.