从 UIWebView 在 Safari 中打开特定 link
Open specific link in Safari from UIWebView
我有一个 UIWebView
加载本地 index.html 文件。
但是我在这个 html 文件中有一个外部 link 我想在 Safari 中打开而不是在 UIWebView
.
内部打开
在 safari 中打开 link 说 UIButton
很简单:
UIApplication.sharedApplication().openURL(NSURL(string: "http://www.whosebug.com"))
从外部打开 Instagram 应用程序 link 也很有效。
<a href="instagram://media?id=434784289393782000_15903882">instagram://media?id=434784289393782000_15903882</a>
所以我的第一个想法是做这样的事情:
<a href="safari://whosebug.com">Open in Safari</a>
但是这似乎不起作用,然后我阅读了一些有关使用 webView:shouldStartLoadWithRequest:navigationType:
的内容
但是每个设法在 Safari 中打开外部 link 的人都在用 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.
}
}
这里是你如何做到的!
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
}
我有一个 UIWebView
加载本地 index.html 文件。
但是我在这个 html 文件中有一个外部 link 我想在 Safari 中打开而不是在 UIWebView
.
在 safari 中打开 link 说 UIButton
很简单:
UIApplication.sharedApplication().openURL(NSURL(string: "http://www.whosebug.com"))
从外部打开 Instagram 应用程序 link 也很有效。
<a href="instagram://media?id=434784289393782000_15903882">instagram://media?id=434784289393782000_15903882</a>
所以我的第一个想法是做这样的事情:
<a href="safari://whosebug.com">Open in Safari</a>
但是这似乎不起作用,然后我阅读了一些有关使用 webView:shouldStartLoadWithRequest:navigationType:
但是每个设法在 Safari 中打开外部 link 的人都在用 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.
}
}
这里是你如何做到的!
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
}