在后台打开新标签页,将焦点放在当前标签上 - Chrome



如何在JavaScript中执行CTRL +单击适用于最新版本Chrome(v68(的链接?

上下文 - 我正在运行一个JavaScript脚本,该脚本在一天中的某些时间打开某个选项卡(并在几分钟后关闭它(。我试图让它在后台打开选项卡,将焦点放在我正在使用的当前选项卡上。

以编程方式打开的选项卡会导致Chrome即使在最小化时也会弹出,这非常具有破坏性。

我在Stack Overflow上找到的这些旧解决方案不适用于最新版本的Chrome。

手动 CTRL + 单击链接即可达到我想要的效果(选项卡在后台打开(。这可以在最新版本的Chrome上以编程方式实现吗?


以下代码在最新版本的Chrome上不再有效。

const openNewBackgroundTab = (url) => {
const anchor = document.createElement("a");
anchor.href = url;
document.body.appendChild(anchor);
const evt = document.createEvent("MouseEvents");    
// the tenth parameter of initMouseEvent sets ctrl key
evt.initMouseEvent(
"click", true, true, window, 0, 0, 0, 0, 0,
true, false, false, false, 0, null
);
anchor.dispatchEvent(evt);
}
openNewBackgroundTab('https://stackoverflow.com');

.. 新选项卡仍然获得焦点。


重现步骤:

  • 打开窗口 1 并在控制台中执行:

let winStacko; setTimeout(() =>{ winStacko = open('https://www.stackoverflow.com'); }, 30 * 1000); setTimeout(() =>winStacko.close(), 2 * 60 * 1000);

  • 执行脚本后 30 秒内打开窗口 2

期望的行为:

  • 窗口 2 在背景选项卡打开然后关闭时始终具有焦点。

由于您希望将其用于个人用途,并且您不介意使用扩展名,因此您可以编写自己的扩展名。

编写 chrome 扩展程序以实现所需的行为实际上非常简单,您只需要知道如何从扩展程序打开/关闭选项卡。 以下页面介绍了整个 API

这是一个例子:

1 - 创建一个manifest.json文件,并请求tabs权限

{
"name": "blabla",
"version": "0.1",
"permissions": ["tabs"],
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "Open a background tab every x time"
},
"manifest_version": 2
}

2 - 在同一文件夹中创建background.js脚本

const INTERVAL = 5000;
setTimeout(function(){
chrome.tabs.create({url: "https://www.stackoverflow.com", active: false }, tab =>{
setTimeout(function(){
chrome.tabs.remove(tab.id);
},INTERVAL);
}); 
},INTERVAL);

您也可以从此处下载

注意:请注意 此处的active参数 ,它定义了选项卡是否应成为窗口中的活动选项卡。不影响 窗口是否聚焦

3 - 在 chrome 中使用扩展名

  1. 如果您使用的是下载链接,请解压缩存档
  2. 从镶边菜单导航到扩展程序
  3. 启用右上角的开发者模式
  4. 单击Load Unpacked按钮选择扩展文件夹
  5. 扩展将自动运行

在过去,您可以使用以下内容来执行此操作:

if(window.focus == false)
{
this.focus();
}


现在你必须使用额外的插件, 由于施虐者。解决方案:
窗口翻转:解决方案
是创建另一个页面。 单击链接时,窗口将关闭,切换到打开刚刚关闭的窗口的页面,并将其位置更改为新页面。
第 1 页代码:

document.getElementById("myId").onclick = function(){window.open("page2.html");window.close()}

第 2 页代码:

window.open("previouspage.html");
window.location = "newpage.html";
//close the page
window.close();

我称这种策略为"窗口翻转"。

我使用 Chrome插件部分解决了问题:强制背景选项卡

https://chrome.google.com/webstore/detail/force-background-tab/gidlfommnbibbmegmgajdbikelkdcmcl/related?hl=en

使用该插件,选项卡将在后台打开,没有焦点。唯一的问题是窗口的最后一个使用的选项卡(可能与启动新选项卡的选项卡不同(仍然会在正在使用的任何其他应用程序的前面弹出。

您可以尝试一种弹出窗口,在新选项卡中打开相同的URL,然后将当前选项卡的location.href更改为所需的新URL。

window.open(window.location.href);
window.location.href = 'http://www.google.com';

最新更新