【问题标题】:Control browser javascript execution from command line从命令行控制浏览器 javascript 执行
【发布时间】:2020-12-15 13:21:42
【问题描述】:
当浏览器窗口不活动时(即我正在使用不同的显示器),我想使用键盘快捷键或 CLI 命令刷新浏览器选项卡中的页面。必须刷新的网页完全在我的控制之下,所以我可以在那里注入任何 javascript。刷新后应保留滚动位置。我的想法是在该页面上包含简单的javascript,它将等待一些外部事件,即通过套接字,当这个事件发生时,运行location.reload(true)。然后我可以从命令行(shell)脚本与这个 javascript 通信,并在需要时为这个命令行脚本分配键盘快捷键。我很确定这是可能的,因为有很多工具可以做到这一点(例如LiveReloadX)。我不能使用这样的工具,因为我不想在发生变化时自动刷新窗口,我想通过显式命令来完成。看起来它应该很简单,但到目前为止我找不到解决方案。所以,我的问题是:如何让运行在浏览器中的javascript被命令行控制?
【问题讨论】:
标签:
javascript
sockets
command-line
【解决方案1】:
完成您的解决方案有两个部分 - 在您的命令行上运行的服务器和在您的网页上运行的客户端。
客户
在您的浏览器中,您想要初始化一个 WebSocket 客户端。 MDN has a great example 开始使用,我添加了您想要的刷新页面的功能:
// 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