首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开从WkWebView到新的WKWebview的外部链接

打开从WkWebView到新的WKWebview的外部链接
EN

Stack Overflow用户
提问于 2017-06-29 18:33:51
回答 1查看 1.5K关注 0票数 1

我想复制Facebook应用程序的行为,当你点击外部链接时,它会在一个新浏览器中打开(但它不在Safari中)。

我现在有一个WKWebView来加载我的网站。我可以在单击事件时捕获用户并打开它们,比如在Safari中。我现在不想在Safari中打开它们,而是创建一个新的WKWebView并在那里显示该链接.

代码语言:javascript
复制
import UIKit
import Darwin
import SafariServices
import WebKit

class ViewController: UIViewController, UIWebViewDelegate,    SFSafariViewControllerDelegate, WKNavigationDelegate {

let url = "http://myurl:3000"
var webView : WKWebView!
var webView2 : WKWebView!

@IBOutlet weak var progressView: UIProgressView!
var myTimer = Timer()
var theBool: Bool = false

override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: self.url)!
    webView.load(URLRequest(url: url) as URLRequest)
    webView.allowsBackForwardNavigationGestures = true
}

override func loadView() {
    webView = WKWebView()
    webView.navigationDelegate = self
    view = webView
}

func webViewDidFinishLoad(_ webView: UIWebView) {
    theBool = true;
}

func webViewDidStartLoad(_ webView: UIWebView) {
    myTimer = Timer.scheduledTimer(timeInterval: 0.06, target: self, selector: #selector(ViewController.updateTimer), userInfo: nil, repeats: true)
    theBool = false;
    progressView.progress = 0.0
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated  {
            webView2 = WKWebView()
            webView2.navigationDelegate = self
            view = webView2
            let url = navigationAction.request.url
            webView2.load(URLRequest(url: url!) as URLRequest)

    } else {
        print("not a user click")
        decisionHandler(.allow)
    }
}

func updateTimer()
{
    if (theBool) {
        if (progressView.progress >= 1) {
            progressView.isHidden = true;
            myTimer.invalidate()
        }
        else {
            progressView.progress += 0.1;
        }
    }
    else {

        if (progressView.isHidden){
            progressView.isHidden = false
        }
        progressView.progress += 0.05;
        if (progressView.progress >= 0.60) {
            progressView.progress = 0.60;
        }
    }
}

}

问题是,即使它正在构建,当我点击外部链接时,应用程序也会崩溃。

libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

EN

回答 1

Stack Overflow用户

发布于 2017-07-01 05:14:08

我建议您实现此WKUIDelegate方法,并在此方法中加载新的WKWebView中的URL。

代码语言:javascript
复制
optional func webView(_ webView: WKWebView, 
createWebViewWith configuration: WKWebViewConfiguration, 
              for navigationAction: WKNavigationAction, 
   windowFeatures: WKWindowFeatures) -> WKWebView?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44832589

复制
相关文章

相似问题

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