Ich habe eine WKWebView in meiner Anwendung. Ich benutze UIWebView nicht, weil es aus irgendeinem seltsamen Grund nicht richtig eine Webseite mit viel JS-Code darin öffnet.WKWebView nicht benutzerdefinierte URL-Schema zu öffnen (Js öffnet benutzerdefinierte Schema-Link in einem neuen Fenster)
Wenn ich mit benutzerdefinierten URL-Schema auf den Link tippen Sie auf "scm: //", tut es nichts ...
Mein Code:
- (void)viewDidLoad {
// ...
WKWebViewConfiguration *configuration = [WKWebViewConfiguration new];
if ([configuration respondsToSelector:@selector(setDataDetectorTypes:)])
[configuration setDataDetectorTypes:WKDataDetectorTypeLink];
myWebView = [[WKWebView alloc] initWithFrame:webFrame configuration:configuration];
myWebView.navigationDelegate = self;
[self.view addSubview:myWebView];
}
#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
NSURL *requestURL = navigationAction.request.URL;
UIApplication *app = [UIApplication sharedApplication];
if ([requestURL.scheme.lowercaseString isEqualToString:@"scm"] && [app canOpenURL:requestURL]) {
[app openURL:requestURL];
decisionHandler(WKNavigationActionPolicyCancel);
}
else
decisionHandler(WKNavigationActionPolicyAllow);
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
[self handleError:error];
}
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
[self handleError:error];
}
#pragma mark - Handle web view errors.
- (void)handleError:(NSError *)error
{
UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = NO;
NSURL *failedUrl = error.userInfo[NSURLErrorFailingURLErrorKey];
if ([failedUrl.scheme.lowercaseString isEqualToString:@"scm"]) {
[app openURL:failedUrl];
}
}
Wenn ich benutzerdefinierte URL klicken , handleError() wird nie aufgerufen, weder decidePolicyForNavigationAction().
'Versuchte Einstellung UIDelegate ohne Glück 'scheinen, als hätten Sie etwas falsches in der Vergangenheit gemacht;) – trungduc
Ja, ich habe nicht die Methode _createWebViewWithConfiguration_ hinzugefügt, weil das Tutorial _Complete Guide zur Implementierung von WKWebView_ es leider nicht hatte. – Borzh