gpt4 book ai didi

javascript - 如何从 nodejs 应用程序访问浏览器的窗口对象?

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:14 27 4
gpt4 key购买 nike

我正在尝试编写一个简单的应用程序来监视文件更改并自动在浏览器中重新加载更新的代码。我知道 livereload nodeamon 和其他人的存在,我只是想写我自己的。我已经创建了服务器,让它读取我想读取的文件,称为监视程序,当监视的文件发生更改时,它会终止并重新启动服务器。最后一部分:它应该刷新浏览器。这怎么可能?

最佳答案

正如其他人所解释的那样,浏览器编程环境以及 window.location.reload() 完全独立于 node.js,因此您不能直接从 node.js 调用它。服务器端代码在 node.js 中的服务器上运行。浏览器中的客户端代码仅在浏览器中运行。两者可以通过 Ajax 请求或通过 webSocket 连接发送的消息进行通信,但它们不能直接调用彼此的代码。


要让浏览器根据服务器上发生的变化进行刷新,有两种基本方法。

  1. 浏览器中的 Javascript 可以定期询问服务器是否有任何新内容(通常使用传递时间戳的 Ajax 调用)。如果服务器说自该时间戳以来有新内容,则浏览器中的 Javascript 可以请求新数据/文件。这种“轮询”方法不是特别有效,因为如果数据不经常更改,那么大多数对新内容的请求只会返回没有新内容。这也不利于电池生命周期。

  2. 浏览器可以与服务器建立持久的 webSocket 连接。然后,当服务器发现服务器上发生了一些变化时,它可以直接向每个连接的浏览器发送通知,通知它有新的东西。所有收到此消息的已连接客户端都可以进行正常的 Ajax 调用以检索新数据。或者,新信息可以直接通过 webSocket 发送到客户端。无论哪种情况,这种直接通知通常都比“轮询”解决方案更有效。

使用 webSocket 选项,您不会希望您的服务器重新启动,因为这会丢弃所有 webSocket 连接。我不确定为什么您当前在某些更改时重新启动服务器,但您必须更改它才能使用 webSocket 解决方案。

关于javascript - 如何从 nodejs 应用程序访问浏览器的窗口对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33313854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com