【问题标题】:Open links in safari instead of inside webview在 safari 中而不是在 webview 中打开链接
【发布时间】:2014-06-05 20:45:41
【问题描述】:

我是制作 iOS 应用程序的初学者。我制作了一个简单的 webview 来显示我的网页。问题是在我的网页中按下的每个链接都会在 webview 中打开。我想在 safari 中打开一些链接。我希望在 webview 中打开以“..something”开头的链接,并在 safari 中打开所有其他链接。我还有一个用于电子邮件和拨号的按钮,我想在手机上的拨号应用程序和电子邮件应用程序中打开它。这是一种可能吗?请简单解释一下。

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;
    }

}

【问题讨论】:

    标签: ios webview


    【解决方案1】:

    您需要将控制器设为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: 链接。

    来自here的一些代码。

    【讨论】:

    • 这行得通,但它会打开 safari 中的所有链接。我希望在 web 视图中打开以 http://example.com 开头的链接
    • 我编辑了它,你需要实现shouldOpenInSafari: 方法来确定应该打开哪些链接。
    • 我收到错误No visible @interface for ViewController declares the selector shouldOpenInSafari
    • 我已经用shouldOpenInSafari: 的示例实现更新了我的答案。
    【解决方案2】:

    对于您要在网页视图中打开的网址,请使用您拥有的相同代码。

    要在 safari 中打开,请使用此

    NSString* launchUrl = @"URL to open in safari";
    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2013-01-07
      • 2020-02-09
      • 2021-07-08
      相关资源
      最近更新 更多