Я хочу обновить страницу на вкладке браузера с помощью сочетания клавиш или команды CLI, когда окно браузера неактивно (т.е. я работаю на другом дисплее). Веб-страница, которую нужно обновить, находится под моим контролем, поэтому я могу внедрить туда любой javascript. Местоположение прокрутки должно быть сохранено после обновления. Моя идея состоит в том, чтобы включить на этой странице простой javascript, который будет ждать какого-то внешнего события, то есть через сокет, и когда это событие произойдет, запустить location.reload(true)
. Затем я могу общаться с этим javascript из сценария командной строки (оболочки) и при необходимости назначать сочетание клавиш этому сценарию командной строки. Я почти уверен, что это возможно, потому что есть много инструментов, которые позволяют это делать (например, LiveReloadX). Я не могу использовать такие инструменты, потому что я не хочу автоматически обновлять окно, когда что-то меняется, я хочу сделать это с помощью явной команды. Кажется, что это должно быть очень просто, но я пока не могу найти решение. Итак, мой вопрос: как заставить javascript, работающий в браузере, управляться из командной строки?
Решение состоит из двух частей: сервер, работающий в вашей командной строке, и клиент, работающий на вашей веб-странице.
В своем браузере вы хотите инициализировать клиент WebSocket. У MDN есть отличный пример, чтобы начать с этого, и я добавил предполагаемую вами функциональность обновления страницы:
// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');
// Connection opened
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
// Listen for messages
socket.addEventListener('message', function (event) {
console.info('Message from server ', event.data);
location.reload(true)
});
Существует множество различных способов настройки сервера WebSocket, и выбор того, который лучше всего подходит для вас, вероятно, слишком широк для ответа на этом сайте. Я провел небольшое исследование, и оказалось, что websocketd — отличный способ обернуть существующую программу командной строки, которая использует стандартный ввод/вывод, в сервер WebSocket. Вам нужно будет реализовать программу командной строки, которая прослушивает ваш ярлык обновления, а затем записывает сообщение в стандартный вывод. Затем вы должны обернуть его с помощью websocketd и запустить из командной строки:
websocketd --port=8080 ./your-shortcut-listener.sh