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

时间:2018-08-09 06:48:55

标签: javascript html google-chrome google-chrome-extension

如何在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');

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


要复制的STEPS:

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

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

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

期望的行为:

  • 打开并关闭背景标签时,窗口2始终处于焦点状态。

4 个答案:

答案 0 :(得分:3)

在过去,您可以使用诸如:

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();

我将此策略称为“窗口翻转”。

答案 1 :(得分:3)

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

编写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);

You can download it from here too

  

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

3-在chrome中使用扩展名

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

答案 2 :(得分:2)

PARTIALLY 使用Chrome插件解决:“强制背景标签”

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

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

答案 3 :(得分:1)

您可以尝试以下弹出式广告,在该标签中的新标签页中打开相同的网址,然后将当前标签页的location.href更改为所需的新网址。

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