如何在 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 始终具有焦点。
原文由 Gabe 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于您希望将此用于个人用途,并且您不介意使用扩展名,因此您可以编写自己的扩展名。
编写 chrome 扩展程序来实现所需的行为实际上非常简单,您只需要知道如何从扩展程序中打开/关闭选项卡即可。以下页面描述了整个 API
这是一个例子:
1 - 创建一个
manifest.json
文件,并请求tabs
权限2 - 在同一文件夹中创建
background.js
脚本你也可以从这里下载
3 - 在 chrome 中使用扩展
Load Unpacked
按钮选择扩展文件夹