【发布时间】:2019-01-16 12:48:27
【问题描述】:
如何在 JavaScript 中执行 CTRL + 单击可在最新版本 Chrome (v68) 中运行的链接?
上下文 - 我正在运行一个 JavaScript 脚本,该脚本在一天中的特定时间打开某个选项卡(并在几分钟后关闭它)。我试图让它在后台打开选项卡,将焦点放在我正在使用的当前选项卡上。
以编程方式打开的选项卡即使在最小化时也会导致 Chrome 弹出,相当混乱。
我在 Stack Overflow 上找到的这些 old solutions 不适用于最新版本的 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('@987654322@'); }, 30 * 1000);
setTimeout(() => winStacko.close(), 2 * 60 * 1000);
- 执行脚本后 30 秒内打开窗口 2
期望的行为:
- 在后台选项卡打开然后关闭时,窗口 2 始终保持焦点。
【问题讨论】:
-
为什么需要这样做?我问这个是因为也许你正在尝试做的事情(也许是一些后台处理?)可以通过使用 Node.js 执行 javascript 代码来实现。通常,出于安全/垃圾邮件的原因,浏览器不允许以这种方式打开标签页。
-
@fsinisi90 是的,我知道。使用节点可以解决问题,但我必须从头开始重新编写系统。它在我的待办事项清单上,但仅限于当前解决方案中断的情况和情况。关于安全原因是的,我知道这一点,但插件毕竟还是这样做的。只有它将注意力集中在另一个选项卡上(实际上是最后一个使用的选项卡,而不是启动新选项卡的选项卡)。还是谢谢
-
打开新标签页对您有什么好处?例如,您是否可以改为在当前选项卡中打开 iframe?您正在寻找的内容可能无法仅通过 Javascript 实现,但可以通过 AutoHotKey 之类的操作系统脚本实现。
-
如果你想要后台处理使用网络工作者。在后台打开偷偷摸摸的标签是恶意应用程序总是尝试的。我讨厌这种情况发生,并在我看到标签打开的闪烁时尽快关闭它们。
-
@CertainPerformance 不,我考虑过 iframe 解决方案,但它对我不起作用。谢谢你,我会参加 AutoHotKey。
标签: javascript html google-chrome google-chrome-extension