在Safari中打开uiwebview链接



我使用Swift 3有一个iOS应用。我在此应用中有一个UIWebView。每当用户单击WebView中的链接时,它就会在WebView内部打开。我需要它到iPhone上Safari应用程序内的链接打开的位置。这是代码:

class VideosViewController: UIViewController {
    @IBOutlet var webView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        var URL = NSURL(string: "http://example.com")
        webView.loadRequest(NSURLRequest(url: URL! as URL) as URLRequest)

    }

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

您能给我一些我可以输入的代码吗?我是新手编码的,所以非常感谢。

更新:由于答案,我得到了一些代码,但是链接仍未在Safari中打开。这是到目前为止的代码...

class VideosViewController : UIViewController, UIWebViewDelegate {
@IBOutlet weak var webView : UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    guard let url = URL(string: "http://example.com") else { return }
    let request = URLRequest(url: url)
    webView.loadRequest(request)
}
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == .linkClicked {
        guard let url = request.url else { return true }
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
        return false
    }
    return true
}

}

使用uiwebview:

确保您的视图控制器符合UIWebViewDelegate,然后在控制器中实现此方法:

class VideosViewController : UIViewController, UIWebViewDelegate {
    @IBOutlet weak var webView : UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        guard let url = URL(string: "http://example.com") else { return }
        
        webView.delegate = self
        let request = URLRequest(url: url)
        webView.loadRequest(request)
    }
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    
        if navigationType == .linkClicked {
        
            guard let url = request.url else { return true }
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
            return false
        }
        return true
    }
}

使用wkwebview:

使用WKWebView代替UIWebView,并确保您的控制器符合WKNavigationDelegate协议。因此,您的实现看起来如下:

class VideosViewController : UIViewController, WKNavigationDelegate {
    var webView : WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
    
        guard let url = URL(string: "http://example.com") else { return }
    
        webView = WKWebView(frame: self.view.frame)
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.isUserInteractionEnabled = true
        webView.navigationDelegate = self
    
        self.view.addSubview(self.webView)
    
        let request = URLRequest(url: url)
        webView.load(request)
    
    }

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    
        // Check if a link was clicked
        if navigationAction.navigationType == .linkActivated {
        
            // Verify the url
            guard let url = navigationAction.request.url else { return }
            let shared = UIApplication.shared
        
            // Check if opening in Safari is allowd
            if shared.canOpenURL(url) {
            
                // Ask the user if they would like to open link in Safari
                let alert = UIAlertController(title: "Open link in Safari?", message: nil, preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "Yes", style: .default, handler: { (alert: UIAlertAction) -> Void in
                    // User wants to open in Safari
                    shared.open(url, options: [:], completionHandler: nil)
                }))
                alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: nil))
            
                present(alert, animated: true, completion: nil)
            
            }
            decisionHandler(.cancel)
        }
        decisionHandler(.allow)
    }
}

以这种方式,当用户单击Web视图中的链接时,将提示他们提示他们,该警报会询问他们是否想在Safari中打开它,如果允许它,Safari将启动和链接将打开。

相关内容

  • 没有找到相关文章

最新更新