on master help sign in
Allow opening of urls in web browser, email etc.
399054eHamish Mackenzie
jsaddle-wkwebview/cbits-uikit/AppDelegate.m+1−1
@@ -58,7 +58,7 @@ void runInWKWebView(HsStablePtr handler, const char * _Nonnull progName) {
58BOOL openApp(NSURL * url) {
58BOOL openApp(NSURL * url) {
59 UIApplication *app = [UIApplication sharedApplication];
59 UIApplication *app = [UIApplication sharedApplication];
60 if ([app canOpenURL:url]) {
60 if ([app canOpenURL:url]) {
61− [app open:url];
61+ [app openURL:url];
62 return true;
62 return true;
63 }
63 }
64 return false;
64 return false;
jsaddle-wkwebview/cbits/WKWebView.m+16
@@ -2,6 +2,8 @@
2#import <Foundation/Foundation.h>
2#import <Foundation/Foundation.h>
3#import <WebKit/WebKit.h>
3#import <WebKit/WebKit.h>
4
4
5+BOOL openApp(NSURL * url);
6+
5extern void jsaddleStart(HsStablePtr);
7extern void jsaddleStart(HsStablePtr);
6extern void jsaddleResult(HsStablePtr, const char * _Nonnull result);
8extern void jsaddleResult(HsStablePtr, const char * _Nonnull result);
7
9
@@ -37,6 +39,20 @@ extern void jsaddleResult(HsStablePtr, const char * _Nonnull result);
37 jsaddleResult(self.resultHandler, [s UTF8String]);
39 jsaddleResult(self.resultHandler, [s UTF8String]);
38}
40}
39
41
42+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
43+{
44+ NSURL *url = navigationAction.request.URL;
45+
46+ if(!navigationAction.targetFrame && ![url.scheme isEqualToString:@"file"]) {
47+ if(openApp(url))
48+ decisionHandler(WKNavigationActionPolicyCancel);
49+ else
50+ decisionHandler(WKNavigationActionPolicyAllow);
51+ }
52+ else
53+ decisionHandler(WKNavigationActionPolicyAllow);
54+}
55+
40@end
56@end
41
57
42void addJSaddleHandler(WKWebView *webView, HsStablePtr startHandler, HsStablePtr resultHandler) {
58void addJSaddleHandler(WKWebView *webView, HsStablePtr startHandler, HsStablePtr resultHandler) {