@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.
754 lines • 102 kB
JavaScript
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
var fs = require("@nativescript/core/file-system");
var webview_ext_common_1 = require("./webview-ext-common");
__export(require("./webview-ext-common"));
var extToMimeType = new Map([
["html", "text/html"],
["htm", "text/html"],
["xhtml", "text/html"],
["xhtm", "text/html"],
["css", "text/css"],
["gif", "image/gif"],
["jpeg", "image/jpeg"],
["jpg", "image/jpeg"],
["js", "text/javascript"],
["otf", "application/vnd.ms-opentype"],
["png", "image/png"],
["svg", "image/svg+xml"],
["ttf", "application/x-font-ttf"],
]);
var extToBinaryEncoding = new Set(["gif", "jpeg", "jpg", "otf", "png", "ttf"]);
var cacheModeMap;
var WebViewExtClient;
var WebChromeViewExtClient;
var WebViewBridgeInterface;
function initializeWebViewClient() {
if (WebViewExtClient) {
return;
}
cacheModeMap = new Map([
["cache_first", android.webkit.WebSettings.LOAD_CACHE_ELSE_NETWORK],
["cache_only", android.webkit.WebSettings.LOAD_CACHE_ONLY],
["default", android.webkit.WebSettings.LOAD_DEFAULT],
["no_cache", android.webkit.WebSettings.LOAD_NO_CACHE],
["normal", android.webkit.WebSettings.LOAD_NORMAL],
]);
var WebViewExtClientImpl = (function (_super) {
__extends(WebViewExtClientImpl, _super);
function WebViewExtClientImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = new WeakRef(owner);
return global.__native(_this);
}
WebViewExtClientImpl.prototype.shouldOverrideUrlLoading = function (view, request) {
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.shouldOverrideUrlLoading(...) - no owner");
return true;
}
var url = request;
var httpMethod = "GET";
var isRedirect = false;
var hasGesture = false;
var isForMainFrame = false;
var requestHeaders = null;
if (typeof request === "object") {
httpMethod = request.getMethod();
isRedirect = request.isRedirect();
hasGesture = request.hasGesture();
isForMainFrame = request.isForMainFrame();
requestHeaders = request.getRequestHeaders();
url = request.getUrl().toString();
}
owner.writeTrace("WebViewClientClass.shouldOverrideUrlLoading(\"" + url + "\") - method:" + httpMethod + " isRedirect:" + isRedirect + " hasGesture:" + hasGesture + " isForMainFrame:" + isForMainFrame + " headers:" + requestHeaders);
if (url.startsWith(owner.interceptScheme)) {
owner.writeTrace("WebViewClientClass.shouldOverrideUrlLoading(\"" + url + "\") - \"" + owner.interceptScheme + "\" - cancel");
return true;
}
var shouldOverrideUrlLoading = owner._onShouldOverrideUrlLoading(url, httpMethod);
if (shouldOverrideUrlLoading === true) {
owner.writeTrace("WebViewClientClass.shouldOverrideUrlLoading(\"" + url + "\") - cancel loading url");
return true;
}
return false;
};
WebViewExtClientImpl.prototype.shouldInterceptRequest = function (view, request) {
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.shouldInterceptRequest(...) - no owner");
return _super.prototype.shouldInterceptRequest.call(this, view, request);
}
var url;
if (typeof request === "string") {
url = request;
}
else if (typeof request === "object") {
url = request.getUrl().toString();
}
if (typeof url !== "string") {
owner.writeTrace("WebViewClientClass.shouldInterceptRequest(\"" + url + "\") - is not a string");
return _super.prototype.shouldInterceptRequest.call(this, view, request);
}
if (!url.startsWith(owner.interceptScheme)) {
return _super.prototype.shouldInterceptRequest.call(this, view, request);
}
var filepath = owner.getRegisteredLocalResource(url);
if (!filepath) {
owner.writeTrace("WebViewClientClass.shouldInterceptRequest(\"" + url + "\") - no matching file");
return _super.prototype.shouldInterceptRequest.call(this, view, request);
}
if (!fs.File.exists(filepath)) {
owner.writeTrace("WebViewClientClass.shouldInterceptRequest(\"" + url + "\") - file: \"" + filepath + "\" doesn't exists");
return _super.prototype.shouldInterceptRequest.call(this, view, request);
}
var tnsFile = fs.File.fromPath(filepath);
var javaFile = new java.io.File(tnsFile.path);
var stream = new java.io.FileInputStream(javaFile);
var ext = tnsFile.extension.substr(1).toLowerCase();
var mimeType = extToMimeType.get(ext) || "application/octet-stream";
var encoding = extToBinaryEncoding.has(ext) || mimeType === "application/octet-stream" ? "binary" : "UTF-8";
owner.writeTrace("WebViewClientClass.shouldInterceptRequest(\"" + url + "\") - file: \"" + filepath + "\" mimeType:" + mimeType + " encoding:" + encoding);
var response = new android.webkit.WebResourceResponse(mimeType, encoding, stream);
if (android.os.Build.VERSION.SDK_INT < 21 || !response.getResponseHeaders) {
return response;
}
var responseHeaders = response.getResponseHeaders();
if (!responseHeaders) {
responseHeaders = new java.util.HashMap();
}
responseHeaders.put("Access-Control-Allow-Origin", "*");
response.setResponseHeaders(responseHeaders);
return response;
};
WebViewExtClientImpl.prototype.onPageStarted = function (view, url, favicon) {
_super.prototype.onPageStarted.call(this, view, url, favicon);
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.onPageStarted(\"" + view + "\", \"" + url + "\", \"" + favicon + "\") - no owner");
return;
}
owner.writeTrace("WebViewClientClass.onPageStarted(\"" + view + "\", \"" + url + "\", \"" + favicon + "\")");
owner._onLoadStarted(url);
};
WebViewExtClientImpl.prototype.onPageFinished = function (view, url) {
_super.prototype.onPageFinished.call(this, view, url);
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.onPageFinished(\"" + view + "\", " + url + "\") - no owner");
return;
}
owner.writeTrace("WebViewClientClass.onPageFinished(\"" + view + "\", " + url + "\")");
owner._onLoadFinished(url).catch(function () { return void 0; });
};
WebViewExtClientImpl.prototype.onReceivedError = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (args.length === 4) {
var _a = __read(args, 4), view = _a[0], errorCode = _a[1], description = _a[2], failingUrl = _a[3];
this.onReceivedErrorBeforeAPI23(view, errorCode, description, failingUrl);
}
else {
var _b = __read(args, 3), view = _b[0], request = _b[1], error = _b[2];
this.onReceivedErrorAPI23(view, request, error);
}
};
WebViewExtClientImpl.prototype.onReceivedErrorAPI23 = function (view, request, error) {
_super.prototype.onReceivedError.call(this, view, request, error);
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.onReceivedErrorAPI23(...) - no owner");
return;
}
var url = error.getUrl && error.getUrl();
if (!url && typeof request === "object") {
url = request.getUrl().toString();
}
owner.writeTrace("WebViewClientClass.onReceivedErrorAPI23(" + error.getErrorCode() + ", " + error.getDescription() + ", " + url + ")");
owner._onLoadFinished(url, error.getDescription() + "(" + error.getErrorCode() + ")").catch(function () { return void 0; });
};
WebViewExtClientImpl.prototype.onReceivedErrorBeforeAPI23 = function (view, errorCode, description, failingUrl) {
_super.prototype.onReceivedError.call(this, view, errorCode, description, failingUrl);
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.onReceivedErrorBeforeAPI23(...) - no owner");
return;
}
owner.writeTrace("WebViewClientClass.onReceivedErrorBeforeAPI23(" + errorCode + ", \"" + description + "\", \"" + failingUrl + "\")");
owner._onLoadFinished(failingUrl, description + "(" + errorCode + ")").catch(function () { return void 0; });
};
return WebViewExtClientImpl;
}(android.webkit.WebViewClient));
WebViewExtClient = WebViewExtClientImpl;
var WebChromeViewExtClientImpl = (function (_super) {
__extends(WebChromeViewExtClientImpl, _super);
function WebChromeViewExtClientImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = new WeakRef(owner);
return global.__native(_this);
}
WebChromeViewExtClientImpl.prototype.onShowCustomView = function (view) {
var _this = this;
var owner = this.owner.get();
if (!owner) {
return;
}
var callback;
if (arguments.length === 3) {
callback = arguments[2];
}
else if (arguments.length === 2) {
callback = arguments[1];
}
else {
return;
}
if (owner._onEnterFullscreen(function () { return _this.hideCustomView(); })) {
this.showCustomViewCallback = callback;
}
else {
callback.onCustomViewHidden();
}
};
WebChromeViewExtClientImpl.prototype.hideCustomView = function () {
if (this.showCustomViewCallback) {
this.showCustomViewCallback.onCustomViewHidden();
}
this.showCustomViewCallback = undefined;
};
WebChromeViewExtClientImpl.prototype.onHideCustomView = function () {
this.showCustomViewCallback = undefined;
var owner = this.owner.get();
if (!owner) {
return;
}
owner._onExitFullscreen();
};
WebChromeViewExtClientImpl.prototype.onProgressChanged = function (view, newProgress) {
var owner = this.owner.get();
if (!owner) {
return;
}
owner._loadProgress(newProgress);
};
WebChromeViewExtClientImpl.prototype.onReceivedTitle = function (view, title) {
var owner = this.owner.get();
if (!owner) {
return;
}
owner._titleChanged(title);
};
WebChromeViewExtClientImpl.prototype.onJsAlert = function (view, url, message, result) {
var owner = this.owner.get();
if (!owner) {
return false;
}
var gotResponse = false;
return owner._webAlert(message, function () {
if (!gotResponse) {
result.confirm();
}
gotResponse = true;
});
};
WebChromeViewExtClientImpl.prototype.onJsConfirm = function (view, url, message, result) {
var owner = this.owner.get();
if (!owner) {
return false;
}
var gotResponse = false;
return owner._webConfirm(message, function (confirmed) {
if (!gotResponse) {
if (confirmed) {
result.confirm();
}
else {
result.cancel();
}
}
gotResponse = true;
});
};
WebChromeViewExtClientImpl.prototype.onJsPrompt = function (view, url, message, defaultValue, result) {
var owner = this.owner.get();
if (!owner) {
return false;
}
var gotResponse = false;
return owner._webPrompt(message, defaultValue, function (message) {
if (!gotResponse) {
if (message) {
result.confirm(message);
}
else {
result.confirm();
}
}
gotResponse = true;
});
};
WebChromeViewExtClientImpl.prototype.onConsoleMessage = function () {
if (arguments.length !== 1) {
return false;
}
var owner = this.owner.get();
if (!owner) {
return false;
}
var consoleMessage = arguments[0];
if (consoleMessage instanceof android.webkit.ConsoleMessage) {
var message = consoleMessage.message();
var lineNo = consoleMessage.lineNumber();
var level = "log";
var _a = android.webkit.ConsoleMessage.MessageLevel, DEBUG = _a.DEBUG, LOG = _a.LOG, WARNING = _a.WARNING;
switch (consoleMessage.messageLevel()) {
case DEBUG: {
level = "debug";
break;
}
case LOG: {
level = "log";
break;
}
case WARNING: {
level = "warn";
break;
}
}
return owner._webConsole(message, lineNo, level);
}
return false;
};
return WebChromeViewExtClientImpl;
}(android.webkit.WebChromeClient));
WebChromeViewExtClient = WebChromeViewExtClientImpl;
var WebViewBridgeInterfaceImpl = (function (_super) {
__extends(WebViewBridgeInterfaceImpl, _super);
function WebViewBridgeInterfaceImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = new WeakRef(owner);
return global.__native(_this);
}
WebViewBridgeInterfaceImpl.prototype.emitEventToNativeScript = function (eventName, data) {
var owner = this.owner.get();
if (!owner) {
console.warn("WebViewExtClientImpl.emitEventToNativeScript(\"" + eventName + "\") - no owner");
return;
}
try {
owner.onWebViewEvent(eventName, JSON.parse(data));
return;
}
catch (err) {
owner.writeTrace("WebViewExtClientImpl.emitEventToNativeScript(\"" + eventName + "\") - couldn't parse data: " + data + " err: " + err);
}
owner.onWebViewEvent(eventName, data);
};
return WebViewBridgeInterfaceImpl;
}(dk.nota.webviewinterface.WebViewBridgeInterface));
WebViewBridgeInterface = WebViewBridgeInterfaceImpl;
}
var instanceNo = 0;
var WebViewExt = (function (_super) {
__extends(WebViewExt, _super);
function WebViewExt() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.localResourceMap = new Map();
_this.instance = ++instanceNo;
return _this;
}
Object.defineProperty(WebViewExt, "supportXLocalScheme", {
get: function () {
return true;
},
enumerable: true,
configurable: true
});
Object.defineProperty(WebViewExt.prototype, "supportXLocalScheme", {
get: function () {
return true;
},
enumerable: true,
configurable: true
});
WebViewExt.prototype.createNativeView = function () {
var nativeView = new android.webkit.WebView(this._context);
var settings = nativeView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(!!this.builtInZoomControls);
settings.setDisplayZoomControls(!!this.displayZoomControls);
settings.setSupportZoom(!!this.supportZoom);
if (android.os.Build.VERSION.SDK_INT >= 21) {
settings.setMixedContentMode(android.webkit.WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
settings.setAllowUniversalAccessFromFileURLs(true);
return nativeView;
};
WebViewExt.prototype.initNativeView = function () {
_super.prototype.initNativeView.call(this);
initializeWebViewClient();
var nativeView = this.nativeViewProtected;
if (!nativeView) {
return;
}
var client = new WebViewExtClient(this);
var chromeClient = new WebChromeViewExtClient(this);
nativeView.setWebViewClient(client);
nativeView.client = client;
nativeView.setWebChromeClient(chromeClient);
nativeView.chromeClient = chromeClient;
var bridgeInterface = new WebViewBridgeInterface(this);
nativeView.addJavascriptInterface(bridgeInterface, "androidWebViewBridge");
nativeView.bridgeInterface = bridgeInterface;
};
WebViewExt.prototype.disposeNativeView = function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
nativeView.client = null;
nativeView.chromeClient = null;
nativeView.destroy();
}
_super.prototype.disposeNativeView.call(this);
};
WebViewExt.prototype.ensurePromiseSupport = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (android.os.Build.VERSION.SDK_INT >= 21) {
return [2];
}
return [4, _super.prototype.ensurePromiseSupport.call(this)];
case 1: return [2, _a.sent()];
}
});
});
};
WebViewExt.prototype._loadUrl = function (src) {
var nativeView = this.nativeViewProtected;
if (!nativeView) {
return;
}
this.writeTrace("WebViewExt<android>._loadUrl(\"" + src + "\")");
nativeView.loadUrl(src);
this.writeTrace("WebViewExt<android>._loadUrl(\"" + src + "\") - end");
};
WebViewExt.prototype._loadData = function (src) {
var nativeView = this.nativeViewProtected;
if (!nativeView) {
return;
}
var baseUrl = "file:///" + fs.knownFolders.currentApp().path + "/";
this.writeTrace("WebViewExt<android>._loadData(\"" + src + "\") -> baseUrl: \"" + baseUrl + "\"");
nativeView.loadDataWithBaseURL(baseUrl, src, "text/html", "utf-8", null);
};
Object.defineProperty(WebViewExt.prototype, "canGoBack", {
get: function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
return nativeView.canGoBack();
}
return false;
},
enumerable: true,
configurable: true
});
WebViewExt.prototype.stopLoading = function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
nativeView.stopLoading();
}
};
Object.defineProperty(WebViewExt.prototype, "canGoForward", {
get: function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
return nativeView.canGoForward();
}
return false;
},
enumerable: true,
configurable: true
});
WebViewExt.prototype.goBack = function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
return nativeView.goBack();
}
};
WebViewExt.prototype.goForward = function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
return nativeView.goForward();
}
};
WebViewExt.prototype.reload = function () {
var nativeView = this.nativeViewProtected;
if (nativeView) {
return nativeView.reload();
}
};
WebViewExt.prototype.registerLocalResource = function (resourceName, path) {
resourceName = this.fixLocalResourceName(resourceName);
var filepath = this.resolveLocalResourceFilePath(path);
if (!filepath) {
this.writeTrace("WebViewExt<android>.registerLocalResource(\"" + resourceName + "\", \"" + path + "\") -> file doesn't exist", webview_ext_common_1.traceMessageType.error);
return;
}
this.writeTrace("WebViewExt<android>.registerLocalResource(\"" + resourceName + "\", \"" + path + "\") -> file: \"" + filepath + "\"");
this.localResourceMap.set(resourceName, filepath);
};
WebViewExt.prototype.unregisterLocalResource = function (resourceName) {
this.writeTrace("WebViewExt<android>.unregisterLocalResource(\"" + resourceName + "\")");
resourceName = this.fixLocalResourceName(resourceName);
this.localResourceMap.delete(resourceName);
};
WebViewExt.prototype.getRegisteredLocalResource = function (resourceName) {
resourceName = this.fixLocalResourceName(resourceName);
var result = this.localResourceMap.get(resourceName);
this.writeTrace("WebViewExt<android>.getRegisteredLocalResource(\"" + resourceName + "\") => \"" + result + "\"");
return result;
};
WebViewExt.prototype.ensureFetchSupport = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.writeTrace("WebViewExt<android>.ensureFetchSupport() - Override 'Fetch API' to support x-local.");
return [4, this.executeJavaScript("\n try {\n window.fetch = null;\n } catch (err) {\n console.error(\"null'ing Native Fetch API failed:\", err);\n }\n ")];
case 1:
_a.sent();
return [4, this.loadFetchPolyfill()];
case 2:
_a.sent();
return [2];
}
});
});
};
WebViewExt.prototype.executeJavaScript = function (scriptCode) {
return __awaiter(this, void 0, void 0, function () {
var result;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (android.os.Build.VERSION.SDK_INT < 19) {
this.writeTrace("WebViewExt<android>.executeJavaScript() -> SDK:" + android.os.Build.VERSION.SDK_INT + " not supported", webview_ext_common_1.traceMessageType.error);
return [2, Promise.reject(new webview_ext_common_1.UnsupportedSDKError(19))];
}
return [4, new Promise(function (resolve, reject) {
var androidWebView = _this.nativeViewProtected;
if (!androidWebView) {
_this.writeTrace("WebViewExt<android>.executeJavaScript() -> no nativeView?", webview_ext_common_1.traceMessageType.error);
reject(new Error("Native Android not initialized, cannot call executeJavaScript"));
return;
}
androidWebView.evaluateJavascript(scriptCode, new android.webkit.ValueCallback({
onReceiveValue: function (result) {
resolve(result);
},
}));
})];
case 1:
result = _a.sent();
return [4, this.parseWebViewJavascriptResult(result)];
case 2: return [2, _a.sent()];
}
});
});
};
WebViewExt.prototype.getTitle = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.nativeViewProtected && this.nativeViewProtected.getTitle()];
});
});
};
WebViewExt.prototype.zoomIn = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
return androidWebView.zoomIn();
};
WebViewExt.prototype.zoomOut = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
return androidWebView.zoomOut();
};
WebViewExt.prototype.zoomBy = function (zoomFactor) {
if (android.os.Build.VERSION.SDK_INT < 21) {
this.writeTrace("WebViewExt<android>.zoomBy - not supported on this SDK");
return;
}
if (!this.nativeViewProtected) {
return;
}
if (zoomFactor >= 0.01 && zoomFactor <= 100) {
return this.nativeViewProtected.zoomBy(zoomFactor);
}
throw new Error("ZoomBy only accepts values between 0.01 and 100 both inclusive");
};
WebViewExt.prototype[webview_ext_common_1.debugModeProperty.getDefault] = function () {
return false;
};
WebViewExt.prototype[webview_ext_common_1.debugModeProperty.setNative] = function (enabled) {
android.webkit.WebView.setWebContentsDebuggingEnabled(!!enabled);
};
WebViewExt.prototype[webview_ext_common_1.builtInZoomControlsProperty.getDefault] = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
var settings = androidWebView.getSettings();
return settings.getBuiltInZoomControls();
};
WebViewExt.prototype[webview_ext_common_1.builtInZoomControlsProperty.setNative] = function (enabled) {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
var settings = androidWebView.getSettings();
settings.setBuiltInZoomControls(!!enabled);
};
WebViewExt.prototype[webview_ext_common_1.displayZoomControlsProperty.getDefault] = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
var settings = androidWebView.getSettings();
return settings.getDisplayZoomControls();
};
WebViewExt.prototype[webview_ext_common_1.displayZoomControlsProperty.setNative] = function (enabled) {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
var settings = androidWebView.getSettings();
settings.setDisplayZoomControls(!!enabled);
};
WebViewExt.prototype[webview_ext_common_1.cacheModeProperty.getDefault] = function () {
var e_1, _a;
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return null;
}
var settings = androidWebView.getSettings();
var cacheModeInt = settings.getCacheMode();
try {
for (var cacheModeMap_1 = __values(cacheModeMap), cacheModeMap_1_1 = cacheModeMap_1.next(); !cacheModeMap_1_1.done; cacheModeMap_1_1 = cacheModeMap_1.next()) {
var _b = __read(cacheModeMap_1_1.value, 2), key = _b[0], value = _b[1];
if (value === cacheModeInt) {
return key;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (cacheModeMap_1_1 && !cacheModeMap_1_1.done && (_a = cacheModeMap_1.return)) _a.call(cacheModeMap_1);
}
finally { if (e_1) throw e_1.error; }
}
return null;
};
WebViewExt.prototype[webview_ext_common_1.cacheModeProperty.setNative] = function (cacheMode) {
var e_2, _a;
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
var settings = androidWebView.getSettings();
try {
for (var cacheModeMap_2 = __values(cacheModeMap), cacheModeMap_2_1 = cacheModeMap_2.next(); !cacheModeMap_2_1.done; cacheModeMap_2_1 = cacheModeMap_2.next()) {
var _b = __read(cacheModeMap_2_1.value, 2), key = _b[0], nativeValue = _b[1];
if (key === cacheMode) {
settings.setCacheMode(nativeValue);
return;
}
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (cacheModeMap_2_1 && !cacheModeMap_2_1.done && (_a = cacheModeMap_2.return)) _a.call(cacheModeMap_2);
}
finally { if (e_2) throw e_2.error; }
}
};
WebViewExt.prototype[webview_ext_common_1.databaseStorageProperty.getDefault] = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
var settings = androidWebView.getSettings();
return settings.getDatabaseEnabled();
};
WebViewExt.prototype[webview_ext_common_1.databaseStorageProperty.setNative] = function (enabled) {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
var settings = androidWebView.getSettings();
settings.setDatabaseEnabled(!!enabled);
};
WebViewExt.prototype[webview_ext_common_1.domStorageProperty.getDefault] = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
var settings = androidWebView.getSettings();
return settings.getDomStorageEnabled();
};
WebViewExt.prototype[webview_ext_common_1.domStorageProperty.setNative] = function (enabled) {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
var settings = androidWebView.getSettings();
settings.setDomStorageEnabled(!!enabled);
};
WebViewExt.prototype[webview_ext_common_1.supportZoomProperty.getDefault] = function () {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return false;
}
var settings = androidWebView.getSettings();
return settings.supportZoom();
};
WebViewExt.prototype[webview_ext_common_1.supportZoomProperty.setNative] = function (enabled) {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
var settings = androidWebView.getSettings();
settings.setSupportZoom(!!enabled);
};
WebViewExt.prototype[webview_ext_common_1.isEnabledProperty.setNative] = function (enabled) {
var androidWebView = this.nativeViewProtected;
if (!androidWebView) {
return;
}
if (enabled) {
androidWebView.setOnTouchListener(null);
}
else {
androidWebView.setOnTouchListener(new android.view.View.OnTouchListener({
onTouch: function () {
return true;
},
}));
}
};
return WebViewExt;
}(webview_ext_common_1.WebViewExtBase));
exports.WebViewExt = WebViewExt;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vidmlldy1leHQuYW5kcm9pZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnZpZXctZXh0LmFuZHJvaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxtREFBcUQ7QUFDckQsMkRBYThCO0FBRTlCLDBDQUFxQztBQUVyQyxJQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDMUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQztJQUNwQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7SUFDdEIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztJQUNuQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7SUFDcEIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO0lBQ3RCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQztJQUNyQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQztJQUN6QixDQUFDLEtBQUssRUFBRSw2QkFBNkIsQ0FBQztJQUN0QyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7SUFDcEIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDO0lBQ3hCLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDO0NBQ3BDLENBQUMsQ0FBQztBQUVILElBQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFHekYsSUFBSSxZQUFvQyxDQUFDO0FBVXpDLElBQUksZ0JBQWlFLENBQUM7QUFDdEUsSUFBSSxzQkFBaUYsQ0FBQztBQUN0RixJQUFJLHNCQUFrRyxDQUFDO0FBRXZHLFNBQVMsdUJBQXVCO0lBQzVCLElBQUksZ0JBQWdCLEVBQUU7UUFDbEIsT0FBTztLQUNWO0lBRUQsWUFBWSxHQUFH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