Chrome扩展:在不失去弹出窗口焦点的情况下打开新标签页

4

我有一个Chrome扩展程序上的简单研究链接列表:

<a href="http://www.example1.com" target="_blank">Research Link 1</a>
<a href="http://www.example2.com" target="_blank">Research Link 2</a>
<a href="http://www.example3.com" target="_blank">Research Link 3</a>

在任何网页上,我都可以使用Ctrl+单击打开三个链接,以在后台打开新标签页。然而,在Chrome扩展程序弹出窗口中似乎不是这种情况。如果您在链接上按Ctrl+单击,则扩展程序将关闭弹出窗口,这将阻止您同时单击多个链接。
我尝试了一种基于单击的chrome.tabs.create方法,这在其他几篇文章中有描述,但它似乎类似于只是单击target="_blank",因为它只会打开一个新的具有焦点的标签页。
chrome.tabs.create({url: 'http://www.google.com'});

有没有办法在不让新标签页获得焦点的情况下打开它(Ctrl+单击),同时仍然允许扩展程序弹出窗口保持在当前标签页上,以便用户可以点击第二个、第三个或第四个链接?这样用户就不必多次运行扩展程序了,因为这需要重新进行身份验证和数据查询,浪费时间。

2个回答

20

是的,create有一个选项:

chrome.tabs.create({url: 'http://www.google.com', active: false});

我正像你描述的那样,在我的一个扩展中使用它。


我快成功了。 :) 谢谢! - ElJeffe
我尝试了相同的代码。它可以正确地在新标签页中打开链接,但扩展程序会崩溃,并显示以下消息:无法访问您的文件,可能已被移动、编辑或删除。ERR_FILE_NOT_FOUND - priya

0

虽然已经有一个被接受的答案,但这是我最终采用的方法,以便在Chrome扩展中也允许适当的ctrl+click(在新的后台窗口中打开标签)- 使用jQuery。

<a class="ctrllink" style="cursor: pointer;" url="http://www.example1.com">Research Link 1</a>
<a class="ctrllink" style="cursor: pointer;" url="http://www.example2.com">Research Link 2</a>
<a class="ctrllink" style="cursor: pointer;" url="http://www.example3.com">Research Link 3</a>

我使用了<a>标签来保持默认的超链接样式(颜色、鼠标悬停下划线等),但删除了href。因为没有href,需要在元素或类中定义光标样式。
全局变量:
var tabplacement = 0;

Tabplacement 是为了模拟 Chrome 打开标签页的方式,从上一个创建的标签页递增。

$(function () {
    $('.ctrllink').on('click', function (event) {
        var ctrlpressed = (event.ctrlKey || event.metaKey);
        var url = $(this).attr('url');
        chrome.tabs.getSelected(null, function (tab) {
            tabplacement += 1;
            var index = tab.index + tabplacement;
            chrome.tabs.create({'url': url, active: !ctrlpressed, 'index': index});
        });
    });
});

添加了metaKey以处理Mac Command ⌘


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接