繁体   English   中英

在Safari中而不是在Webview中打开链接

[英]Open links in safari instead of inside webview

我是制作iOS应用程序的初学者。 我做了一个简单的Webview显示我的网页。 问题是在我的网页中按下的每个链接都在webview中打开。 我希望在野生动物园中打开一些链接。 我希望在Webview中打开以“ ..something”开头的链接,并在野生动物园中打开所有其他链接。 我还有一个电子邮件和拨号按钮,我想在电话上的拨号应用程序和电子邮件应用程序中打开它。 这有可能吗? 请简单说明。

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (nonatomic, strong) IBOutlet UIWebView *webView;

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize webView;

- (void)viewDidLoad
{

NSURL *url = [NSURL URLWithString:@"http://MyWebPage"];
NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestURL];

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

我使用下面的这段代码使用Java为Android制作了相同的应用程序

@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        try{
            System.out.println("url called:::" + url);
            if (url.startsWith("tel:")) {
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
                startActivity(intent);
            }  else if (url.startsWith("http:")
                    || url.startsWith("https:")) {

                 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
                 startActivity(intent);

            }  else if (url.startsWith("mailto:")) {

                MailTo mt=MailTo.parse(url);

                send_email(mt.getTo());

            }
            else {
                return false;
            }
        }catch(Exception e){
            e.printStackTrace();
        }

        return true;
    }

}

对于要在Web视图中打开的URL,请使用相同的代码。

要在野生动物园中开放,请使用此

NSString* launchUrl = @"URL to open in safari";

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];

您需要使控制器成为UIWebViewDelegate并实现webView: shouldStartLoadWithRequest:navigationType:方法。

@interface ViewController () <UIWebViewDelegate>

viewDidLoad应该看起来像这样:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
    NSURL *url = [NSURL URLWithString:@"http://MyWebPage"];
    NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
    webView.delegate = self;
    [webView loadRequest:requestURL];
}


- (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked && [self shouldOpenInSafari:[inRequest URL]]) {
        [[UIApplication sharedApplication] openURL:[inRequest URL]];
        return NO;
    }

    return YES;
}

- (BOOL)shouldOpenInSafari:(NSURL*)url
{
    if ([url.scheme isEqualToString:@"mailto"]) {
        return YES;
    }
    else if ([url.scheme isEqualToString:@"tel"]) {
        return YES;
    }
    else if (([url.scheme isEqualToString:@"http"] || [url.scheme isEqualToString:@"https"]) && [url.host isEqualToString:@"example.com"]) {
        return YES;
    }

    return NO;
}

然后,您需要实现shouldOpenInSafari:方法。 openURL:方法还可以处理tel:mailto:链接。

这里有一些代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM