从命令行控制浏览器javascript的执行



当浏览器窗口未处于活动状态时(即,我在不同的显示器上工作(,我想使用键盘快捷键或CLI命令刷新浏览器选项卡中的页面。必须刷新的网页完全在我的控制之下,所以我可以在那里注入任何javascript。刷新后应保留滚动位置。我的想法是在该页面上包含一个简单的javascript,它将等待一些外部事件,即通过套接字,当该事件发生时,运行location.reload(true)。然后,我可以从命令行(shell(脚本中与此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.log('Message from server ', event.data);
location.reload(true)
});

服务器

有很多不同的方法可以设置WebSocket服务器,选择最适合你的服务器可能太宽泛了,无法在这个网站上找到答案。我做了一些快速的研究,看起来websocketd是将使用标准输入/输出的现有命令行程序封装到WebSocket服务器中的好方法。您需要实现一个命令行程序来侦听刷新快捷方式,然后向标准输出写入消息。然后,您可以用websocketd包装它,并从命令行运行它:

websocketd --port=8080 ./your-shortcut-listener.sh

最新更新