diff --git a/console/android/src/main/java/org/openremote/android/MainActivity.java b/console/android/src/main/java/org/openremote/android/MainActivity.java index 7bf8684b12..9f09494c96 100644 --- a/console/android/src/main/java/org/openremote/android/MainActivity.java +++ b/console/android/src/main/java/org/openremote/android/MainActivity.java @@ -64,6 +64,7 @@ import java.util.logging.Logger; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -382,6 +383,19 @@ public void onPageFinished(WebView view, String url) { webViewLoaded = true; } + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + if (request.getUrl().getScheme().equalsIgnoreCase("webbrowser")) { + String newUrl = request.getUrl().buildUpon().scheme("https").build().toString(); + Intent i = new Intent(Intent.ACTION_VIEW); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + i.setData(Uri.parse(newUrl)); + startActivity(i); + return true; + } + return super.shouldOverrideUrlLoading(view, request); + } + protected void handleError(int errorCode, String description, String failingUrl, boolean isForMainFrame) { LOG.warning("Error requesting '" + failingUrl + "': " + errorCode + "(" + description + ")"); diff --git a/console/iOS/ORLib/ORLib/ORSchemeHandler.swift b/console/iOS/ORLib/ORLib/ORSchemeHandler.swift new file mode 100644 index 0000000000..4a25d39d22 --- /dev/null +++ b/console/iOS/ORLib/ORLib/ORSchemeHandler.swift @@ -0,0 +1,31 @@ +// +// ORSchemeHandler.swift +// ORLib +// +// Created by Michael Rademaker on 24/06/2019. +// + +import UIKit +import WebKit + +class ORSchemeHandler: NSObject, WKURLSchemeHandler { + + public static let browserScheme = "webbrowser" + + func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) { + if let url = urlSchemeTask.request.url, url.scheme == ORSchemeHandler.browserScheme { + if var components = URLComponents(url: url, resolvingAgainstBaseURL: false) { + components.scheme = "https" + if let newUrl = components.url { + UIApplication.shared.open(newUrl) + } + } + urlSchemeTask.didReceive(URLResponse(url: url, mimeType: nil, expectedContentLength: -1, textEncodingName: nil)) + urlSchemeTask.didFinish() + } + } + + func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) { + urlSchemeTask.didFailWithError(WKError(WKError.unknown)) + } +} diff --git a/console/iOS/ORLib/ORLib/ORViewController.swift b/console/iOS/ORLib/ORLib/ORViewController.swift index b67bde135d..d1f814d188 100644 --- a/console/iOS/ORLib/ORLib/ORViewController.swift +++ b/console/iOS/ORLib/ORLib/ORViewController.swift @@ -282,6 +282,7 @@ open class ORViewcontroller : UIViewController, URLSessionDelegate, WKScriptMess } else { sbHeight = UIApplication.shared.statusBarFrame.height } + webCfg.setURLSchemeHandler(ORSchemeHandler(), forURLScheme: ORSchemeHandler.browserScheme) let webFrame = CGRect(x : 0,y : sbHeight,width : view.frame.size.width,height : view.frame.size.height - sbHeight) myWebView = WKWebView(frame: webFrame, configuration: webCfg) myWebView?.autoresizingMask = [.flexibleWidth, .flexibleHeight];