我在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 的相关文档,但对此感到非常困惑。一些指示将非常有用。
虽然扩展的后台上下文有一个
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'
} );
这两种方法都不需要权限。