Web View API
(import webview)
This multi-platform library for [https://www.call-cc.org/|CHICKEN]
allows you to show HTML user interfaces in a window, inject JavaScript
code and HTML content into the page and receive messages from JavaScript
on the page.
Web View
(webview? VALUE) ⇒ BOOLEAN
Predicate for the tagged pointer type representing a web view window.
(webview TITLE PROC [#:url URL] [#:width WIDTH] [#:height HEIGHT] [#:resizable? RESIZABLE] [#:debug? DEBUG] [#:yield! YIELD]) ⇒ VOID
Creates a web view window with the given TITLE and runs an
event loop until the user closes the window or termination is requested
using [#p:webview-terminate!|webview-terminate!].
The message callback is invoked as (PROC WEBVIEW STRING)
whenever a script on the web page calls window.external.invoke(STRING).
If you specify a URL that is not #f, the page at that
location is loaded into the web view. Otherwise, a blank page is loaded
which sends a "load" message when ready and contains a
<div id="app"> element that you can fill with custom
content, for example using [#p:webview-html-set!|webview-html-set!].
Window properties may be specified using the WIDTH,
HEIGHT and RESIZABLE keyword arguments. If the
DEBUG keyword argument is not #f and the platform
supports it, the web view will allow access to debugging tools.
If YIELD is not given or #f, the event loop will block
the operating system thread when no events are pending. You can set
YIELD to a number of seconds sleep period between iterations of
the web view event loop; this reduces responsiveness of the user
interface but allows other CHICKEN threads to run and does not hog the
CPU. You can also set YIELD to #t to call
thread-yield! between iterations of the event loop; this allows
other CHICKEN threads to run without delaying user interface event
processing but will use a lot of CPU cycles.
(webview-terminate! WEBVIEW) ⇒ VOID
Requests termination of the event loop for the given WEBVIEW.
(webview-title-set! WEBVIEW TITLE) ⇒ VOID
Sets the TITLE of the given WEBVIEW window.
(webview-fullscreen-set! WEBVIEW FULLSCREEN) ⇒ VOID
Changes the FULLSCREEN state of the given WEBVIEW
window.
(webview-eval WEBVIEW SCRIPT) ⇒ VOID
Asynchronously triggers evaluation of the given SCRIPT code in
the context of the page displayed by the given WEBVIEW.
(webview-style-set! WEBVIEW SELECTOR PROPERTY VALUE [PRIORITY]) ⇒ VOID
Asynchronously triggers a style modification of all DOM elements matching the
given SELECTOR on the page displayed by the given WEBVIEW.
The given style PROPERTY is set to the given VALUE for the
selected elements, optionally specifying a PRIORITY other than the
default.
SELECTOR is specified as for [https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Selectors|CSS].
(webview-style-delete! WEBVIEW SELECTOR PROPERTY) ⇒ VOID
Asynchronously triggers a style modification of all DOM elements matching the given
SELECTOR on the page displayed by the given WEBVIEW. The
given style PROPERTY is removed from the selected elements.
SELECTOR is specified as for [https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Selectors|CSS].
(webview-html-set! WEBVIEW SELECTOR HTML [OUTER?]) ⇒ VOID
Asynchronously triggers replacement of the first DOM element matching the given
SELECTOR on the page displayed by the given WEBVIEW with the
given HTML content.
SELECTOR is specified as for [https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Selectors|CSS].
HTML content is specified in the form accepted by
[#p:write-html|write-html].
If OUTER? is #f or not given, only the contents of
the specified element are replaced, otherwise the entire element is replaced.
(webview-html-delete! WEBVIEW SELECTOR [OUTER?]) ⇒ VOID
Asynchronously triggers removal of the first DOM element matching the given
SELECTOR from the page displayed by the given WEBVIEW.
SELECTOR is specified as for [https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Selectors|CSS].
If OUTER? is #f or not given, only the contents of
the specified element are removed, otherwise the entire element is deleted.
Dialogs
(webview-dialog WEBVIEW TITLE TYPE [VALUE]) ⇒ VALUE
Shows a modal dialog with the given TITLE in the context of the
given WEBVIEW.
If TYPE is #:open or #:save, a file selection
dialog is shown and VALUE may be the path to a file that will
be pre-selected. If TYPE is #:open-directory, the
dialog allows the selection of directories rather than regular files.
The procedure will return the path to a selected file or #f in
case the dialog is cancelled.
If TYPE is #:info, #:warning or
#:error, a message dialog is shown and VALUE is the
message to display in the dialog. The procedure will not return a
meaningful result in this case.
The running operating system thread will be blocked until the dialog is
dismissed.
Logging
(webview-log MESSAGE) ⇒ VOID
Outputs a message using a platform-specific logging mechanism.
Content Generation
(import webview-content)
This support module contains procedures that write
[https://developer.mozilla.org/en-US/docs/Web/JavaScript|JavaScript] strings
and [https://developer.mozilla.org/en-US/docs/Web/HTML|HTML] document trees
with proper escaping.
char-set:no-js-escape
A [https://srfi.schemers.org/srfi-14/srfi-14.html|SRFI-14] set of characters
that do not need to be escaped inside a JavaScript string.
(write-js STRING [PORT] [QUOTES]) ⇒ VOID
Writes a STRING to the given PORT or the current output port
using JavaScript escaping rules. If QUOTES is given and not
#f, its content is printed before and after the STRING
contents. If QUOTES is not given, double quotes are put around the
string.
(html-tag-rule TAG) ⇒ RULE
(html-tag-rule TAG RULE) ⇒ VOID
Retrieves or sets the content rule for HTML elements named TAG.
The RULE can be one of the symbols normal,
raw or void.
(write-html ELEMENT [PORT]) ⇒ VOID
Writes an HTML5 rendering of the X-expression ELEMENT to the given
PORT or the current output port.
ELEMENT must conform to the following grammar:
X-EXPR = ELEMENT
| CONTENT
ELEMENT = (SYMBOL ((SYMBOL CONTENT ...) ...) X-EXPR ...) ;; element with optional attributes
| (SYMBOL X-EXPR ...) ;; element without attributes
CONTENT = STRING ;; character data
| SYMBOL ;; symbolic entity reference
| INTEGER ;; numeric entity reference
If the tag symbol of the element is html, an HTML5 document
type declaration is written before the element itself.
If the tag symbol of the element is begin, attributes are not
allowed and only the contents are written as for a normal element.