Откройте новую вкладку в фоновом режиме, оставив фокус на текущей вкладке - 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);

  • Открыть окно 2 в течение 30 секунд после выполнения скрипта

ЖЕЛАЕМОЕ поведение:

  • Окно 2 фокусируется на все время, в то время как вкладка фона открывается и затем закрывается.

Ответ 1

Поскольку вы хотите это для личного использования, и вы не возражаете против использования расширения, вы можете написать свой собственный.

Написание хром-расширения для достижения требуемого поведения на самом деле очень просто. Все, что вам нужно знать, это открыть/закрыть вкладки из расширения. Следующая страница описывает весь 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 - Используйте удлинитель в хромированном корпусе

  1. Если вы используете ссылку для загрузки, распакуйте архив
  2. Перейдите из меню chrome в расширения
  3. Включить режим разработчика в верхнем правом углу
  4. Нажмите кнопку " Load Unpacked, чтобы выбрать папку расширения
  5. Расширение будет выполняться автоматически

Ответ 2

В старые времена вы могли бы сделать это, используя такие вещи, как:

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


Теперь вам нужно использовать дополнительные плагины.
из-за обидчиков.

Ответ 3

Я PARTIALLY решил использовать плагин Chrome: вкладка Force Background

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

Используя это дополнение, вкладка открывается в фоновом режиме без фокуса. Единственная проблема заключается в том, что последняя используемая вкладка окна (может отличаться от вкладки, которая запускает новую вкладку) по-прежнему всплывает перед любым другим используемым приложением.

Ответ 4

Вы можете попробовать что-то вроде pop, где вы откроете тот же URL-адрес на новой вкладке, а затем измените location.href текущей вкладки на нужный новый url.

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