我试图让我的混合IOS应用程序使用Swift和WKWebviews打开一个具有target="_blank"
的链接,或者如果这个URL包含移动Safari中的http://
、https://
或mailto:
。
我从这个答案得到了这段代码。
func webView(webView: WKWebView!, createWebViewWithConfiguration configuration: WKWebViewConfiguration!, forNavigationAction navigationAction: WKNavigationAction!, windowFeatures: WKWindowFeatures!) -> WKWebView! {
if navigationAction.targetFrame == nil {
webView.loadRequest(navigationAction.request)
}
return nil
}
首先,这对我没有任何好处。第二,我希望它在一个新的窗口打开。我发现了这样的代码.
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.sharedApplication().openURL(requestUrl)
}
我怎么把这两者结合起来,让他们开始工作呢?我需要在ViewController声明中添加什么才能使它工作?
发布于 2016-10-27 21:08:16
为iOS 10 Swift 3更新的代码:
override func loadView() {
super.loadView()
self.webView.navigationDelegate = self
self.webView.uiDelegate = self //must have this
}
func webView(_ webView: WKWebView,
createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame == nil, let url = navigationAction.request.url {
if url.description.lowercased().range(of: "http://") != nil ||
url.description.lowercased().range(of: "https://") != nil ||
url.description.lowercased().range(of: "mailto:") != nil {
UIApplication.shared.openURL(url)
}
}
return nil
}
发布于 2015-06-02 19:03:12
In (从这里开始)
override func loadView() {
super.loadView()
self.webView.navigationDelegate = self
self.webView.UIDelegate = self //must have this
}
然后添加函数(从这里开始,加上一些).
func webView(webView: WKWebView,
createWebViewWithConfiguration configuration: WKWebViewConfiguration,
forNavigationAction navigationAction: WKNavigationAction,
windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame == nil {
var url = navigationAction.request.URL
if url.description.lowercaseString.rangeOfString("http://") != nil || url.description.lowercaseString.rangeOfString("https://") != nil || url.description.lowercaseString.rangeOfString("mailto:") != nil {
UIApplication.sharedApplication().openURL(url)
}
}
return nil
}
发布于 2015-11-19 16:05:30
首先添加WKNavigationDelegate
和webviewWk.navigationDelegate = self
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
// This is a 'new window action' (aka target="_blank") > open this URL externally.
// If we´re doing nothing here, WKWebView will also just do nothing.
// Maybe this will change in a later stage of the iOS 8 Beta
if navigationAction.navigationType == WKNavigationType.linkActivated {
if let url = navigationAction.request.url, UIApplication.shared.canOpenURL(url) {
print("Trying to open \(url.absoluteString)")
UIApplication.shared.open(url)
}
}
decisionHandler(WKNavigationActionPolicy.allow)
}
https://stackoverflow.com/questions/30603671
复制相似问题