簡體   English   中英

如何從nodejs應用程序訪問瀏覽器的窗口對象?

[英]How can I access the browser's window object from a nodejs application?

我正在嘗試編寫一個簡單的應用程序來監視文件更改並自動在瀏覽器中重新加載更新的代碼。 我知道livereload nodeamon和其他人的存在,我只想寫自己的。 我創建了服務器,讓它讀取我想要讀取的文件,稱為觀察者,當觀察文件發生變化時,它會殺死並重新啟動服務器。 最后一部分:它應該刷新瀏覽器。 這怎么可能?

正如其他人所解釋的那樣,瀏覽器編程環境以及window.location.reload()與node.js完全分開,因此您無法直接從node.js調用它。 服務器端代碼在node.js中的服務器上運行。 瀏覽器中的客戶端代碼僅在瀏覽器中運行。 這兩者可以通過Ajax請求或通過webSocket連接發送的消息進行通信,但是它們不能直接相互調用代碼。


要使瀏覽器根據服務器上發生的變化進行刷新,有兩種基本方法。

  1. 瀏覽器中的Javascript可以定期詢問服務器是否有任何新內容(通常使用傳遞時間戳的Ajax調用)。 如果服務器說自那個時間戳以來有新的東西,那么瀏覽器中的Javascript可以請求新的數據/文件。 這種“輪詢”方法並不是特別有效,因為如果數據不經常變化,那么大多數新事物的請求將只返回沒有新的東西。 它對電池壽命也不友好。

  2. 瀏覽器可以與服務器建立持久的webSocket連接。 然后,當服務器發現服務器上發生了某些變化時,它可以直接向每個連接的瀏覽器發送通知,通知它有新的東西。 然后,接收此消息的所有連接客戶端都可以進行正常的Ajax調用以檢索新數據。 或者,新信息可以通過webSocket直接發送到客戶端。 在任何一種情況下,這種直接通知通常比“輪詢”解決方案更有效。

使用webSocket選項,您不希望服務器重新啟動,因為這會丟棄所有webSocket連接。 我不確定為什么你當前正在重新啟動服務器,但是你必須改變它以使用webSocket解決方案。

NodeJS沒有表示全局命名空間的window變量。 相反,它有一個名為global的變量。

NodeJS中沒有瀏覽器,窗口或URL位置。

它是一個純粹的服務器端工具。

在node.js中,您有一個process ,它是一個node.js全局對象,如window ,它是一個瀏覽器全局對象。

欲了解更多信息類型process成Node.js的外殼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM