HTMLViewer
From Xojo Documentation
Supported Platforms Project Types: Desktop Platforms: macOS, Windows, Linux |
Renders HTML and provides basic navigation features.
Events | |||||||||||||
|
Methods | ||||||||||||||||||
|
Notes
On macOS, the HTMLViewer supports getting and setting a custom user agent string and increasing or decreasing the font size.
App Transport Security
Starting with MacOS 10.11 and Xojo 2018r4, your apps have to use secure "https" connections or you will get this error: "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection". You can work around this by providing a plist with your app to indicate what non-secure URLs you are using. For more information:
Webkit on Windows
You can use WebKit on Windows by setting the Renderer property to WebKit (1). Using WebKit on Windows adds the entire Chromium Embedded Framework 3 (CEF3) engine to your app, increasing its size by about 100MB.
To make plugins available to WebKit on Windows, create a folder called WebKitPlugins within your Libs folder in your application folder and place the plugins you need there.
When using WebKit on Windows, HTMLViewer.Handle returns a pointer to the cef_browser_t struct.
Windows IE Version
On Windows, the Native Renderer is probably using an older version of the Internet Explorer renderer. This may result in web pages that do not display or work as you expect. You can tell Windows to use a newer version of the IE rendering engine with a Registry setting. This is how you can change it using Xojo:
// This code handles both 64 and 32-bit builds
Var reg As New RegistryItem("HKEY_CURRENT_USER\SOFTWARE\Microsoft")
reg = reg.AddFolder("Internet Explorer")
reg = reg.AddFolder("Main")
reg = reg.AddFolder("FeatureControl")
reg = reg.AddFolder("FEATURE_BROWSER_EMULATION")
// Source MS documentation: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)
reg.Value(App.ExecutableFile.Name) = CType(11000 , Int32)
#Endif
Another to to keep in mind is if Internet Explorer 11 has the option "Display intranet sites in Compatibility View" selected in the "Compatibility View Settings" pane, then IE will most likely still render using IE7. If you control the source to the content you want to display, you can include this in the <head> section of the HTML document:
<meta http-equiv="X-UA-Compatible" content="IE=11">
And also use HTML5 DOCTYPE at the start of the document:
<!DOCTYPE html>
Windows Performance
On Windows, the Native Renderer might not use the GPU by default, which may result in slower rendering speeds depending on what you are displaying. You can enable it via the Registry:
reg = reg.AddFolder("Internet Explorer")
reg = reg.AddFolder("Main")
reg = reg.AddFolder("FeatureControl")
reg = reg.AddFolder("FEATURE_GPU_RENDERING")
reg.Value(App.ExecutableFile.Name) = 1
Linux Support
If it is available, the Linux HTMLViewer uses WebKit (libwebkitgtk version 3).
Refer to the Resources:System_Requirements#64-bit Configuration for Running 32-bit_Apps section for commands that you can use to install libwebkitgtk v3 on various Linux distributions.
On Linux, HTMLViewer.Handle returns the GtkScrolledWindow that hosts the WebKitWebView control (please refer to the WebKitGTK site for information on how to use this system control).
Sample Code
To implement a simple web browser, create a window with a large HTML Viewer control. Set its LockLeft, LockTop, LockRight, and LockBottom properties so that it resizes as the user resizes the window. Use a TextField as the URL entry area and a PushButton as the browser's Go button. That is, the user clicks Go to display the URL entered into the TextField.
In this example, the HTMLViewer is named “HTML”. The following code is in the Action event of the PushButton:
You can use a ProgressBar to indicate that the web page is loading. In the HTMLViewer's DocumentBegin event, initialize and show the ProgressBar with the code:
ProgressBar1.Visible = True
In the DocumentProgressChanged event, increment the value of the ProgressBar. This event handler is passed the value of PercentageComplete (0 to 100).
ProgressBar1.Maximum = 0 // display indeterminate progress
Else
ProgressBar1.Maximum = 100
End if
ProgressBar1.Value = percentageComplete
In the DocumentComplete event handler, hide the ProgressBar with the line:
When the title of the web page has been received, you can display it in the window's Title bar using the HTMLViewer's TitleChanged event. It is passed the new title in the String parameter newTitle. Update the window title with the line:
Use a second TextField to display the status of the load process. In the HTMLViewer's StatusChanged event handler, set the value of this TextField. This event handler is passed the current status in the String parameter, NewStatus. Display this string with the following line in the StatusChanged event:
If a new browser window is supposed to open, you need to insert some code to handle this event. For example, the user clicks a link that is supposed to display the new page in another window. Use the NewWindow event handler to create the window. The following code assumes that the browser is contained in a window called MainWindow.
See Also
Xojo.Net.HTTPSocket, HTTPSocket classes