Откройте новую вкладку в фоновом режиме, оставив фокус на текущей вкладке - 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 - Используйте удлинитель в хромированном корпусе
- Если вы используете ссылку для загрузки, распакуйте архив
- Перейдите из меню chrome в расширения
- Включить режим разработчика в верхнем правом углу
- Нажмите кнопку "
Load Unpacked
, чтобы выбрать папку расширения - Расширение будет выполняться автоматически
Ответ 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';