example app html ios swift safari uiwebview

html - app - Abra un enlace específico en Safari desde UIWebView



wkwebview ios (1)

Tengo un UIWebView que carga un archivo index.html local.

Sin embargo, tengo un enlace externo en este archivo html que me gustaría abrir en Safari en lugar de internamente en UIWebView .

Abrir un enlace en safari de decir un UIButton fue bastante simple:

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

Abrir la aplicación de Instagram desde un enlace externo también funciona como un encanto.

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

Así que mi primer intento fue hacer algo como esto:

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

Sin embargo, eso no parece funcionar, entonces leo algo sobre el uso de webView:shouldStartLoadWithRequest:navigationType:

Pero todos los que lograron abrir un enlace externo en Safari escriben en Obj-C con el que no estoy demasiado familiarizado mientras escribo en Swift.

Actualización con código 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. } }


¡Aquí sabrás como podrás hacerlo!

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 }