Objective-C - 覆盖UIWebView中的URL?

Ben*_*ark 3 overriding objective-c uiwebview

是否可以覆盖UIWebView中的URL?例如,如果我想检测tel:links并将+1加到数字的开头,如果它还没有.

在Android上我这样做:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("tel:1")) {
                        Intent intent = new Intent(Intent.ACTION_DIAL,
                                Uri.parse(url)); 
                        startActivity(intent);
                    }
                else if (url.startsWith("tel:")) {

                    int start = url.indexOf(":");
                    String suffix = url.substring(start + 1);
                    String newUrl = "tel:1" + suffix;
                        Intent intent = new Intent(Intent.ACTION_DIAL,
                                Uri.parse(newUrl)); 
                        startActivity(intent); 
                }

                else if(url.startsWith("http:") || url.startsWith("https:")) {
                    view.loadUrl(url);
                }
                return true;
            }
Run Code Online (Sandbox Code Playgroud)

我怎么能在Objective-C中做到这一点?

rma*_*ddy 6

您可以实现webView:shouldStartLoadWithRequest:navigationType:Web视图委托方法.检查类型是否有"单击",然后检查请求的URL以查看它是否为tel:URL.如果是这样,您可以根据需要处理URL.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSURL *url = request.URL;
        NSString *scheme = [url scheme];
        if ([scheme isEqualToString:@"tel"]) {
            // Update the url as needed

            // Now handled the url by asking the app to open it
            [[UIApplication sharedApplication] openURL:url];
            return NO; // don't let the webview process it.
        }
    }

    return YES;
}
Run Code Online (Sandbox Code Playgroud)