From f60d8be82809df7e016f12e08040e2c57d9a2853 Mon Sep 17 00:00:00 2001 From: Hans Dijkema Date: Mon, 9 Mar 2026 11:47:32 +0100 Subject: [PATCH] - --- private/racket-webview.rkt | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/private/racket-webview.rkt b/private/racket-webview.rkt index 3d23f31..1e7b6ef 100644 --- a/private/racket-webview.rkt +++ b/private/racket-webview.rkt @@ -61,7 +61,9 @@ webview-bind! webview-set-url! + webview-navigate! webview-set-html! + webview-base-url webview-set-innerHTML! @@ -113,6 +115,7 @@ [file-getter #:mutable] [boilerplate-js #:mutable] [webserver-thread #:mutable] + [base-url #:mutable] [request-count #:mutable] [sec-token-cache #:mutable] [cert-ou-token #:mutable] @@ -377,7 +380,7 @@ (->* ((or/c symbol? string?) procedure? procedure?) (#:boilerplate-js procedure? #:parent (or/c wv? #f)) wv?) - (let* ((h (make-wv #f 0 -1 file-getter bj #f 0 (make-lru 250 #:cmp eq?) + (let* ((h (make-wv #f 0 -1 file-getter bj #f #f 0 (make-lru 250 #:cmp eq?) (symbol->string (make-security-token)) (symbol->string context))) (cert (generate-self-signed-cert 2048 365 '("127.0.0.1" "localhost") "NL" "Dijkema" @@ -401,6 +404,7 @@ (base-req (format "https://127.0.0.1:~a" (wv-port h))) ) (set-wv-webserver-thread! h server) + (set-wv-base-url! h base-req) (rkt-webview-set-ou-token (wv-handle h) (wv-cert-ou-token h)) (rkt-webview-set-url! (wv-handle h) base-req) h) @@ -428,11 +432,30 @@ (define/contract (webview-set-url! wv url) (-> wv? (or/c string? url?) symbol?) - (if (url? url) - (rkt-webview-set-url! (wv-handle wv) (url->string url)) - (rkt-webview-set-url! (wv-handle wv) url) + (let ((u (if (string? url) (string->url url) url)) + (bu (string->url (wv-base-url wv)))) + (when (or (eq? (url-scheme u) #f) (eq? (url-host u) #f)) + (set-url-host! u (url-host bu)) + (set-url-port! u (url-port bu)) + (set-url-scheme! u (url-scheme bu)) + (set-url-path-absolute?! u #t) + ) + (when (eq? (url-scheme u) #f) + (set-url-scheme! (url-scheme bu))) + (rkt-webview-set-url! (wv-handle wv) (url->string u)) + ) ) -) + +(define/contract (webview-navigate! wv place) + (-> wv? string? symbol?) + (webview-run-js wv + (format "window.location = '~a';" + (esc-quote place)))) + +(define/contract (webview-base-url wv) + (-> wv? url?) + (string->url (wv-base-url wv))) + (define-syntax def-win-func (syntax-rules ()