#javascript #autohotkey
Вопрос:
Я использую расширение в Chrome (массовый открыватель URL). Это расширение открывает несколько ссылок с интервалом в несколько секунд. Он также открывает новую вкладку (x1) с кнопками воспроизведения и паузы. При нажатии кнопки воспроизведения расширение начинает открывать новые вкладки справа и продолжает открываться. При нажатии кнопки паузы, она останавливает открытие новой вкладки.
Что я хочу, чтобы AutoHotkey делал здесь, так это считывал количество открытых вкладок в Chrome. Если вкладок меньше 10, я хочу, чтобы AutoHotkey вводил данные на вкладку x1 и запускал открытие новой вкладки. Кроме того, если количество открытых вкладок превышает 12, я хочу, чтобы AutoHotkey снова вводил данные на вкладку x1 и останавливал открытие новой вкладки.
В принципе, я хочу, чтобы в Chrome одновременно открывались только 10 или 12 вкладок, и если я закрою одну или две вкладки, я хочу, чтобы автоматически открывалась новая вкладка. Есть ли способ, которым я могу этого добиться?
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Прочитайте этот источник: https://dev.to/dcodeyt/send-data-between-tabs-with-javascript-2oa
Инициализация канала происходит следующим образом:
const channel = new BroadcastChannel("my-channel");
Вот как вы можете получить сообщение:
channel.addEventListener("message", e => {
console.log(e.data);
});
Вот как вы можете опубликовать сообщение
channel.postMessage("Hello world");
Теперь, зная все это, давайте посмотрим
Решение
Если вы откроете вкладки, вы откроете некоторый URL для каждой из них. Предполагая, что вы контролируете исходный код открываемых вами страниц, вы можете сделать следующее:
- Инициализируйте канал как на главной вкладке, так и на открытых вкладках
- Создайте прослушиватель
message
событий как на вашей основной вкладке, так и на открытых вкладках - Всякий раз, когда вы захотите открыть вкладки, отправляйте сообщения на вложенные вкладки и смотрите, сколько ответов вы получите
Пример
Прослушиватель дочерних событий
const channel = new BroadcastChannel("my-channel");
channel.addEventListener("message", e => {
if (e.data === "ping") channel.postMessage("pong");
});
Прослушиватель основных событий
var pongCount = 0;
var pongLimit = 12;
const channel = new BroadcastChannel("my-channel");
channel.addEventListener("message", e => {
if (e.data === "pong") pongCount ;
});
Отметьте
setInterval(function() {
pongCount = 0;
channel.postMessage("ping");
setTimeout(function() {
for (let pongIndex = pongCount 1; pongIndex < pongLimit; pongIndex ) {
//open a tab
}
}, 100);
}, 1000);
Обратите внимание, что код тика должен быть на главной вкладке
Редактировать
Кажется, что нет доступа к загружаемым страницам. Если это так, можно реализовать прокси-приложение, которое будет передавать запрос на целевые страницы в обход ограничений Chrome и иметь страницы-оболочки, где у вас есть полный доступ с точки зрения исходного кода и, следовательно, которые могли бы отправлять и получать сообщения.
В качестве альтернативы можно использовать расширение chrome.tabs, например
chrome.tabs.query({windowType:'normal'}, function(tabs) {
console.log('Number of open tabs in all normal browser windows:',tabs.length);
});
Но для этой цели потребуется установить данное расширение: https://developer.chrome.com/docs/extensions/reference/tabs /
Комментарии:
1. У меня нет исходного кода !!. по сути, я пытаюсь открыть несколько ссылок, используя расширение в Chrome. И все эти ссылки открываются на новых вкладках, но проблема в том, что они продолжают открываться, что приводит к задержке Chrome. поэтому я хочу открывать только 10 или 12 ссылок одновременно, а остальные открывать после закрытия предыдущих вкладок !!. Надеюсь, вы понимаете
2. @BillyMiller Я понимаю вашу проблему, но информация, которую вы собираетесь собирать, то есть открытые вкладки, является в некотором роде частной информацией. Например, почему я, как пользователь, должен доверять вашему расширению с количеством открываемых вкладок? Так что, я думаю, вы не сможете напрямую получить эту информацию. Например, если вы пишете веб-поисковик и запускаете его в Chrome, вы можете создать прокси-сайт, для которого у вас есть исходный код, и который передает запрос целевому объекту на стороне сервера.
3. @BillyMiller кроме того, если пользователь открыл и другие вкладки, будет сложно отличить вкладки, открытые вашим приложением, от вкладок, открытых пользователем. Итак, чтобы сделать это различие, вам нужно будет получать активные ответы от ваших вкладок.
4. @BillyMiller если вы сможете убедить своих пользователей устанавливать дополнительные расширения, chrome.tabs ( developer.chrome.com/docs/extensions/reference/tabs ) может быть полезно.
5. @BillyMiller Я добавил дополнительную информацию к ответу