Получить текущий базовый 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. Местоположение может быть получено через функцию определения местоположения, которая принимает экземпляр окна.

В конце концов мой код выглядит

Другие вопросы по тегам