当前位置:  开发笔记 > 前端 > 正文

强制WebView链接启动Safari?

如何解决《强制WebView链接启动Safari?》经验,为你挑选了3个好方法。

我有一个嵌入在我的iPhone应用程序中的UIWebView.我希望能够将该webview中的某些链接打开到完整的Mobile Safari应用程序中(即不是我的嵌入式版本).

是否有一种简单的方法来构建我的一些href来强制执行此操作,而不是在我的嵌入式webview中打开每个链接?

谢谢.



1> Brad Larson..:

为了扩展Randy所说的内容,我在我的应用程序中使用这个来在外部Safari或Mail应用程序中打开每个http://,https://和mailto:// URL:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
{
    NSURL *requestURL =[ [ request URL ] retain ]; 
    if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ]) 
        && ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) { 
        return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; 
    } 
    [ requestURL release ]; 
    return YES; 
}

正如Randy所说,你需要在你设置为UIWebView的委托的任何类中实现它.要只有选择的URL启动Safari,您可以将他们的方案从http://更改为safari://或类似的东西,并且只将这些URL发送到系统(在用http://替换自定义URL方案之后) .

我在我的内部帮助文档中执行此操作,该文档是在UIWebView中显示的HTML,因此在我的应用程序中嵌入了通用Web浏览器时,我不会在审阅过程中遇到问题.



2> 小智..:

好,我知道了.也许它不是完美的解决方案,但你可以这样做:

只在你的WebViewController.m:

将该行添加webView.delegate = self;到该viewDidLoad过程:

- (void)viewDidLoad {
    webView.delegate = self;
    .... your code ....
}

然后你可以像上面描述的那样在 Controller.m文件后面的布尔结果函数中添加:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return false;
    }
    return true;
}



3> Randy Simon..:

我自己没试过,但我认为你可以实现UIWebViewDelegate方法

webView:shouldStartLoadWithRequest:navigationType 

只要单击UIWebView中的链接,就会调用它.在该方法中,您只需要确定点击的链接是否应该导致启动Safari,如果应该,则使用​​openURL.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    // Check if this was a click event and then some other criteria for determining if you want to launch Safari.
    if (navigationType == UIWebViewNavigationTypeLinkClicked && [Some other criteria]) {
        [[UIApplication sharedApplication] openURL:request.URL];

        // Return false to indicate to the UIWebView to not navigate to the linked target
        return false;
    }

    // Return true so that the UIWebView loads the link target
    return true;
}

不要忘记您需要将UIWebView委托属性设置为实现UIWebViewDelegate的类的实例.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有