Получить текущий базовый URL для веб-страницы
Я запускаю приложение PureScript, которое обслуживается серверным приложением Suave в F#. Во внешнем интерфейсе мне нужно открыть соединение WebSocket в PureScript с бэкэндом, но часть пути должна быть динамической в зависимости от того, как работает бэкэнд-приложение (например, в некоторых блоках это: ws://host1:9999/ws/blah
на других это может быть ws://host2:7777/ws/blah
).
Так что мне нужно получить текущий URL, на котором обслуживается мое приложение, чтобы я мог просто поставить ws://
на передней панели и ws/blah
в конце (или как-то сделать относительный путь WebSocket?).
Я пытался сделать что-то вроде:
wdw <- window
htmldoc <- document wdw
let doc = htmlDocumentToDocument htmldoc
docUrl <- url doc
connection <- WS.create (WS.URL $ "ws://" <> docUrl <> "ws/blah") []
Но данный URL документа имеет http://
на передней части этого. Я мог бы взломать струну и вырвать эту часть, но я надеюсь найти более элегантный способ.
Если это имеет значение, я также использую здесь галоген, поэтому у меня есть доступ к их API, если есть что-то полезное для этой ситуации.
1 ответ
Я был в состоянии собрать это воедино из предложенного выше stholzm.
В документации по расположению есть функции для имени хоста и порта, которые можно использовать для объединения базового URL. Местоположение может быть получено через функцию определения местоположения, которая принимает экземпляр окна.
В конце концов мой код выглядит