簡體   English   中英

在后台打開新標簽,將焦點放在當前標簽上 - Chrome

[英]Open new tab in background leaving focus on current tab - 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. 從chrome菜單導航到擴展程序
  3. 啟用右上角的開發人員模式
  4. 單擊“ Load Unpacked按鈕以選擇擴展文件夾
  5. 擴展程序將自動運行

在過去,您可以使用以下內容執行此操作:

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


現在你必須使用額外的插件,因為濫用者。
解決方案:窗口翻轉:
解決方案是創建另一個頁面。 當您單擊該鏈接時,窗口將關閉,它將切換到打開剛剛關閉的窗口的頁面,並將其位置更改為新頁面。
第1頁代碼:

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

代碼:

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';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM