@nota/nativescript-webview-ext
Version:
Extended WebView for NativeScript which adds 'x-local' scheme for local-files. events between WebView and native-layer, javascript execution, injecting CSS and JS-files.
241 lines (240 loc) • 11.6 kB
TypeScript
/// <reference path="types/url.d.ts" />
import "@nativescript/core";
import { ContainerView, EventData, Property } from "@nativescript/core";
export interface ViewPortProperties {
width?: number | "device-width";
height?: number | "device-height";
initialScale?: number;
maximumScale?: number;
minimumScale?: number;
userScalable?: boolean;
}
export declare type CacheMode = "default" | "cache_first" | "no_cache" | "cache_only" | "normal";
export declare const autoInjectJSBridgeProperty: Property<WebViewExtBase, boolean>;
export declare const builtInZoomControlsProperty: Property<WebViewExtBase, boolean>;
export declare const cacheModeProperty: Property<WebViewExtBase, CacheMode>;
export declare const databaseStorageProperty: Property<WebViewExtBase, boolean>;
export declare const domStorageProperty: Property<WebViewExtBase, boolean>;
export declare const debugModeProperty: Property<WebViewExtBase, boolean>;
export declare const displayZoomControlsProperty: Property<WebViewExtBase, boolean>;
export declare const supportZoomProperty: Property<WebViewExtBase, boolean>;
export declare const srcProperty: Property<WebViewExtBase, string>;
export declare const scrollBounceProperty: Property<WebViewExtBase, boolean>;
export declare const limitsNavigationsToAppBoundDomainsProperty: Property<WebViewExtBase, boolean>;
export declare type ViewPortValue = boolean | ViewPortProperties;
export declare const viewPortProperty: Property<WebViewExtBase, ViewPortValue>;
export declare enum EventNames {
LoadFinished = "loadFinished",
LoadProgress = "loadProgress",
LoadStarted = "loadStarted",
ShouldOverrideUrlLoading = "shouldOverrideUrlLoading",
TitleChanged = "titleChanged",
WebAlert = "webAlert",
WebConfirm = "webConfirm",
WebConsole = "webConsole",
EnterFullscreen = "enterFullscreen",
ExitFullscreen = "exitFullscreen",
WebPrompt = "webPrompt"
}
export interface LoadJavaScriptResource {
resourceName: string;
filepath: string;
}
export interface LoadStyleSheetResource {
resourceName: string;
filepath: string;
insertBefore?: boolean;
}
export interface InjectExecuteJavaScript {
scriptCode: string;
name: string;
}
export interface WebViewExtEventData extends EventData {
object: WebViewExtBase;
}
export interface LoadEventData extends WebViewExtEventData {
url: string;
navigationType?: NavigationType;
error?: string;
}
export interface LoadStartedEventData extends LoadEventData {
eventName: EventNames.LoadStarted;
}
export interface LoadFinishedEventData extends LoadEventData {
eventName: EventNames.LoadFinished;
}
export interface ShouldOverrideUrlLoadEventData extends LoadEventData {
eventName: EventNames.ShouldOverrideUrlLoading;
httpMethod: string;
cancel?: boolean;
}
export interface ShouldOverideUrlLoadEventData extends ShouldOverrideUrlLoadEventData {
}
export interface LoadProgressEventData extends WebViewExtEventData {
eventName: EventNames.LoadProgress;
url: string;
progress: number;
}
export interface TitleChangedEventData extends WebViewExtEventData {
eventName: EventNames.TitleChanged;
url: string;
title: string;
}
export interface WebAlertEventData extends WebViewExtEventData {
eventName: EventNames.WebAlert;
url: string;
message: string;
callback: () => void;
}
export interface WebPromptEventData extends WebViewExtEventData {
eventName: EventNames.WebPrompt;
url: string;
message: string;
defaultText?: string;
callback: (response?: string) => void;
}
export interface WebConfirmEventData extends WebViewExtEventData {
eventName: EventNames.WebConfirm;
url: string;
message: string;
callback: (response: boolean) => void;
}
export interface WebConsoleEventData extends WebViewExtEventData {
eventName: EventNames.WebConsole;
url: string;
data: {
lineNo: number;
message: string;
level: string;
};
}
export interface WebViewEventData extends WebViewExtEventData {
data?: any;
}
export interface EnterFullscreenEventData extends WebViewExtEventData {
eventName: EventNames.EnterFullscreen;
url: string;
exitFullscreen(): void;
}
export interface ExitFullscreenEventData extends WebViewExtEventData {
eventName: EventNames.ExitFullscreen;
url: string;
}
export declare type NavigationType = "linkClicked" | "formSubmitted" | "backForward" | "reload" | "formResubmitted" | "other" | void;
export declare class UnsupportedSDKError extends Error {
constructor(minSdk: number);
}
export declare class WebViewExtBase extends ContainerView {
static readonly supportXLocalScheme: boolean;
static isFetchSupported: boolean;
static isPromiseSupported: boolean;
android: any;
ios: any;
get interceptScheme(): string;
static get loadStartedEvent(): EventNames;
static get loadFinishedEvent(): EventNames;
static get shouldOverrideUrlLoadingEvent(): EventNames;
static get loadProgressEvent(): EventNames;
static get titleChangedEvent(): EventNames;
static get webAlertEvent(): EventNames;
static get webConfirmEvent(): EventNames;
static get webPromptEvent(): EventNames;
static get webConsoleEvent(): EventNames;
static get enterFullscreenEvent(): EventNames;
static get exitFullscreenEvent(): EventNames;
readonly supportXLocalScheme: boolean;
src: string;
autoInjectJSBridge: boolean;
debugMode: boolean;
builtInZoomControls: boolean;
displayZoomControls: boolean;
databaseStorage: boolean;
domStorage: boolean;
supportZoom: boolean;
scrollBounce: boolean;
viewPortSize: ViewPortValue;
cacheMode: "default" | "no_cache" | "cache_first" | "cache_only";
protected autoInjectScriptFiles: LoadJavaScriptResource[];
protected autoInjectStyleSheetFiles: LoadStyleSheetResource[];
protected autoInjectJavaScriptBlocks: InjectExecuteJavaScript[];
protected tempSuspendSrcLoading: boolean;
_onLoadFinished(url: string, error?: string): Promise<LoadFinishedEventData>;
_onLoadStarted(url: string, navigationType?: NavigationType): void;
_onShouldOverrideUrlLoading(url: string, httpMethod: string, navigationType?: NavigationType): boolean | undefined;
_loadProgress(progress: number): void;
_titleChanged(title: string): void;
_webAlert(message: string, callback: () => void): boolean;
_webConfirm(message: string, callback: (response: boolean | null) => void): boolean;
_webPrompt(message: string, defaultText: string, callback: (response: string | null) => void): boolean;
_webConsole(message: string, lineNo: number, level: string): boolean;
_onEnterFullscreen(exitFullscreen: () => void): boolean;
_onExitFullscreen(): boolean;
_loadUrl(src: string): void;
_loadData(src: string): void;
stopLoading(): void;
get canGoBack(): boolean;
get canGoForward(): boolean;
goBack(): void;
goForward(): void;
reload(): void;
resolveLocalResourceFilePath(filepath: string): string | void;
registerLocalResource(name: string, filepath: string): void;
unregisterLocalResource(name: string): void;
getRegisteredLocalResource(name: string): string | void;
loadUrl(src: string): Promise<LoadFinishedEventData>;
loadJavaScriptFile(scriptName: string, filepath: string): Promise<void>;
loadJavaScriptFiles(files: LoadStyleSheetResource[]): Promise<void>;
loadStyleSheetFile(stylesheetName: string, filepath: string, insertBefore?: boolean): Promise<void>;
loadStyleSheetFiles(files: LoadStyleSheetResource[]): Promise<void>;
autoLoadJavaScriptFile(resourceName: string, filepath: string): void;
removeAutoLoadJavaScriptFile(resourceName: string): void;
autoLoadStyleSheetFile(resourceName: string, filepath: string, insertBefore?: boolean): void;
removeAutoLoadStyleSheetFile(resourceName: string): void;
autoExecuteJavaScript(scriptCode: string, name: string): void;
removeAutoExecuteJavaScript(name: string): void;
normalizeURL(url: string): string;
protected ensureFetchSupport(): Promise<void>;
protected loadFetchPolyfill(): Promise<void>;
protected ensurePromiseSupport(): Promise<void>;
protected loadPromisePolyfill(): Promise<void>;
protected ensurePolyfills(): Promise<void>;
executeJavaScript<T>(scriptCode: string, stringifyResult?: boolean): Promise<T>;
executePromise<T>(scriptCode: string, timeout?: number): Promise<T>;
executePromises<T>(scriptCodes: string[], timeout?: number): Promise<T | void>;
generateLoadJavaScriptFileScriptCode(resourceName: string, path: string): Promise<string>;
generateLoadCSSFileScriptCode(resourceName: string, path: string, insertBefore?: boolean): Promise<string>;
protected injectWebViewBridge(): Promise<void>;
protected injectViewPortMeta(): Promise<void>;
generateViewPortCode(): Promise<string | null>;
protected parseWebViewJavascriptResult(result: any): any;
writeTrace(message: string, type?: number): void;
emitToWebView(eventName: string, data: any): void;
onWebViewEvent(eventName: string, data: any): void;
getTitle(): Promise<string | void>;
zoomIn(): boolean;
zoomOut(): boolean;
zoomBy(zoomFactor: number): void;
fixLocalResourceName(resourceName: string): string;
}
export interface WebViewExtBase {
on(eventNames: string, callback: (data: WebViewEventData) => void, thisArg?: any): any;
once(eventNames: string, callback: (data: WebViewEventData) => void, thisArg?: any): any;
on(event: EventNames.ShouldOverrideUrlLoading, callback: (args: ShouldOverrideUrlLoadEventData) => void, thisArg?: any): any;
once(event: EventNames.ShouldOverrideUrlLoading, callback: (args: ShouldOverrideUrlLoadEventData) => void, thisArg?: any): any;
on(event: EventNames.LoadStarted, callback: (args: LoadStartedEventData) => void, thisArg?: any): any;
once(event: EventNames.LoadStarted, callback: (args: LoadStartedEventData) => void, thisArg?: any): any;
on(event: EventNames.LoadFinished, callback: (args: LoadFinishedEventData) => void, thisArg?: any): any;
once(event: EventNames.LoadFinished, callback: (args: LoadFinishedEventData) => void, thisArg?: any): any;
on(event: EventNames.LoadProgress, callback: (args: LoadProgressEventData) => void, thisArg?: any): any;
once(event: EventNames.LoadProgress, callback: (args: LoadProgressEventData) => void, thisArg?: any): any;
on(event: EventNames.TitleChanged, callback: (args: TitleChangedEventData) => void, thisArg?: any): any;
once(event: EventNames.TitleChanged, callback: (args: TitleChangedEventData) => void, thisArg?: any): any;
on(event: EventNames.WebAlert, callback: (args: WebAlertEventData) => void, thisArg?: any): any;
once(event: EventNames.WebAlert, callback: (args: WebAlertEventData) => void, thisArg?: any): any;
on(event: EventNames.WebConfirm, callback: (args: WebConfirmEventData) => void, thisArg?: any): any;
once(event: EventNames.WebConfirm, callback: (args: WebConfirmEventData) => void, thisArg?: any): any;
on(event: EventNames.WebPrompt, callback: (args: WebPromptEventData) => void, thisArg?: any): any;
once(event: EventNames.WebPrompt, callback: (args: WebPromptEventData) => void, thisArg?: any): any;
on(event: EventNames.WebConsole, callback: (args: WebConsoleEventData) => void, thisArg?: any): any;
once(event: EventNames.WebConsole, callback: (args: WebConsoleEventData) => void, thisArg?: any): any;
}