首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Safari中打开WKWebview target="_blank“链接

在Safari中打开WKWebview target="_blank“链接
EN

Stack Overflow用户
提问于 2015-06-02 18:20:37
回答 6查看 23.3K关注 0票数 11

我试图让我的混合IOS应用程序使用Swift和WKWebviews打开一个具有target="_blank"的链接,或者如果这个URL包含移动Safari中的http://https://mailto:

我从这个答案得到了这段代码。

代码语言:javascript
运行
复制
func webView(webView: WKWebView!, createWebViewWithConfiguration     configuration: WKWebViewConfiguration!, forNavigationAction navigationAction:     WKNavigationAction!, windowFeatures: WKWindowFeatures!) -> WKWebView! {
    if navigationAction.targetFrame == nil {
        webView.loadRequest(navigationAction.request)
    }
    return nil
}

首先,这对我没有任何好处。第二,我希望它在一个新的窗口打开。我发现了这样的代码.

代码语言:javascript
运行
复制
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
     UIApplication.sharedApplication().openURL(requestUrl)
}

我怎么把这两者结合起来,让他们开始工作呢?我需要在ViewController声明中添加什么才能使它工作?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-10-27 21:08:16

为iOS 10 Swift 3更新的代码:

代码语言:javascript
运行
复制
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
}
票数 13
EN

Stack Overflow用户

发布于 2015-06-02 19:03:12

In (从这里开始)

代码语言:javascript
运行
复制
 override func loadView() {
    super.loadView()
    self.webView.navigationDelegate = self 
    self.webView.UIDelegate = self  //must have this
 }

然后添加函数(从这里开始,加上一些).

代码语言:javascript
运行
复制
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
}
票数 13
EN

Stack Overflow用户

发布于 2015-11-19 16:05:30

首先添加WKNavigationDelegatewebviewWk.navigationDelegate = self

代码语言:javascript
运行
复制
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)
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30603671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档