从UIWebView打开Safari中的特定链接

时间:2016-01-12 10:38:39

标签: html ios swift safari uiwebview

我有UIWebView加载本地index.html文件。

但是我在这个html文件中有一个外部链接,我想在Safari中打开,而不是在UIWebView内部打开。

通过说UIButton打开safari中的链接很简单:

UIApplication.sharedApplication().openURL(NSURL(string: "http://www.stackoverflow.com"))

从外部链接打开Instagram应用程序也像魅力一样。

<a href="instagram://media?id=434784289393782000_15903882">instagram://media?id=434784289393782000_15903882</a>

所以我的第一个就是做这样的事情:

<a href="safari://stackoverflow.com">Open in Safari</a>

然而,这似乎不起作用,然后我读了一些关于使用webView:shouldStartLoadWithRequest:navigationType:

的内容

但是每个设法在Safari中打开外部链接的人都在用Obj-C写作,我在Swift中写作时并不太熟悉。

使用Swift代码更新:

import UIKit

class AccessoriesViewController: UIViewController, UIWebViewDelegate {


    @IBOutlet weak var webView:UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()


        if let url = NSBundle.mainBundle().URLForResource("accessories", withExtension: "html") {
            webView.loadRequest(NSURLRequest(URL: url))
        }



    }
    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return UIStatusBarStyle.LightContent;
    }

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked {
            UIApplication.sharedApplication().openURL(url)
            return false
        }
        return true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

1 个答案:

答案 0 :(得分:4)

以下是如何做到的!

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if let url = request.URL where navigationType == UIWebViewNavigationType.LinkClicked {
            UIApplication.sharedApplication().openURL(url)
            return false
        }
        return true
    }