The WebView
component is used to display web content within your application. You use the control by providing a src
attribute that accepts a URL,a path to a local HTML file or directly HTML string.
<WebView [src]="webViewSrc"
(loadStarted)="onLoadStarted($event)"
(loadFinished)="onLoadFinished($event)">
</WebView>
import { Component } from "@angular/core";
import { WebView, LoadEventData } from "tns-core-modules/ui/web-view";
@Component({
moduleId: module.id,
templateUrl: "./usage.component.html"
})
export class UsageComponent {
webViewSrc = "https://docs.nativescript.org/";
onLoadStarted(args: LoadEventData) {
const webView = args.object as WebView;
if (!args.error) {
console.log("Load Start");
console.log(`EventName: ${args.eventName}`);
console.log(`NavigationType: ${args.navigationType}`);
console.log(`Url: ${args.url}`);
} else {
console.log(`EventName: ${args.eventName}`);
console.log(`Error: ${args.error}`);
}
}
onLoadFinished(args: LoadEventData) {
const webView = args.object as WebView;
if (!args.error) {
console.log("Load Finished");
console.log(`EventName: ${args.eventName}`);
console.log(`NavigationType: ${args.navigationType}`);
console.log(`Url: ${args.url}`);
} else {
console.log(`EventName: ${args.eventName}`);
console.log(`Error: ${args.error}`);
}
}
}
In the above samples, we are setting up loadStarted
and loadFinished
events. Both events will be emitted when there is a change the source for the WebView
component (change the URL or load local HTML file). The loadStarted
event will be executed when the WebView source start loading and loadFinished
will be fired when the source is already loaded. The events will return info of type LoadEventData
.
Improve this document
Demo Source
<GridLayout rows="50 50 *">
<Label row="0" #touchlabel [text]="touchResult" textWrap="true" ></Label>
<Label row="1" #panlabel [text]="panResult" textWrap="true" ></Label>
<WebView row="2" (loaded)="onWebViewLoaded($event)" (touch)="webViewTouch($event)" (pan)="webViewPan($event)" [src]="webViewSrc" ></WebView>
</GridLayout>
import { Component } from "@angular/core";
import { isAndroid } from "tns-core-modules/platform";
@Component({
moduleId: module.id,
templateUrl: "./tips-and-tricks.component.html"
})
export class TipsAndTricksComponent {
webViewSrc = "<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>";
touchResult = "Touch: x: _ y: _";
panResult = "Pan: deltaX: _ deltaY: _";
onWebViewLoaded(webargs) {
const webview = webargs.object;
if (isAndroid) {
// Disabled the native zoom control (to enable gestures on Android)
webview.android.getSettings().setDisplayZoomControls(false);
}
}
webViewTouch(args) {
this.touchResult = `Touch: x: ${args.getX().toFixed(3)} y: ${args.getY().toFixed(3)}`;
console.log(`Touch: x: ${args.getX().toFixed(3)} y: ${args.getY().toFixed(3)}`);
}
webViewPan(args) {
this.panResult = `Pan: deltaX: ${args.deltaX.toFixed(3)} deltaY: ${args.deltaY.toFixed(3)}`;
console.log(`Pan: deltaX: ${args.deltaX.toFixed(3)} deltaY: ${args.deltaY.toFixed(3)}`);
}
}
Note: To be able to use gestures in WebView
component on Android, we should first disabled the zoom control. To do that we could access the android
property and with the help of setDisplayZoomControls
to set this control to false
.
Improve this document
Demo Source
Name |
Type |
Description |
src |
string |
Gets or sets the url, local file path or HTML string. |
Name |
Returns |
Description |
reload |
void |
Reloads the WebView forcing updating of the content. |
Name |
Description |
loadStarted |
Emitted when the content is starting to load. |
loadFinished |
Emitted when the content loading is over. |