【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 2020-03-24
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多