关于 websocket:获取网页的当前基本 URL

Get current base URL for web page

我正在运行一个 PureScript 应用程序,该应用程序由 F# 中的后端 Suave 应用程序提供服务。在前端,我需要在 PureScript 中打开到后端的 WebSocket 连接,但部分路径需要根据后端应用程序的运行方式是动态的(例如,在某些盒子上它是:ws://host1:9999/ws/blah,在其他盒子上它可能是 ws://host2:7777/ws/blah).

所以我需要获取我的应用程序正在提供的当前 URL,这样我就可以在前面放一个 ws://,在最后放一个 ws/blah(或者以某种方式做一个相对的 WebSocket 路径? ).

我试过做类似的事情:

1
2
3
4
5
wdw <- window
htmldoc <- document wdw
let doc = htmlDocumentToDocument htmldoc
docUrl <- url doc
connection <- WS.create (WS.URL $"ws://" <> docUrl <>"ws/blah") []

但是给出的文档 URL 前面有 http://。我可以破解字符串并将那部分撕掉,但我希望找到一种更优雅的方式。

如果这很重要,我也在这里使用卤素灯,所以如果那里有对这种情况有用的东西,我可以访问他们的 API。


我能够根据上面 stholzm 的建议拼凑起来。

在 location 的文档中,Hostname 和 Port 的函数可用于拼凑基本 url。位置可以通过接收窗口实例的位置函数获得。

最后,我的代码看起来像

enter