从UIWebView迁移到WKWebView(decidePolicyFor navigationAction)无法正常工作

我需要重构代码才能开始使用WKWebView,因为苹果建议我从UIWebView切换到WKWebview。我的问题是,当应用执行时,我的代码的一部分没有被触发,我似乎无法指出我做错了什么,这就是我需要替换的代码

0.29292

我试图这样做

class Webview: UIWebView,UIWebViewDelegate,UIGestureRecognizerDelegate,MfmailComposeViewControllerDelegate {

var initialViewController: LinkViewControllerType?
var isLoadingHTMLString:Bool = true

var scrollViewDidScroll: ((_ scrollView: UIScrollView) -> ())?
var scrollViewDidEndDecelerating: ((_ scrollView: UIScrollView) -> ())?

var scrollViewDidEndDragging: ((_ scrollView: UIScrollView,_ willDecelerate: Bool) -> ())?

var scrollViewWillEndDragging: ((_ scrollView: UIScrollView,_ withVelocity: CGPoint,_ targetcontentOffset: UnsafeMutablePointer<CGPoint>) -> ())?

var shouldStartLoadWith: ((_ webview: UIWebView,_ request: URLRequest,_ navigationType: UIWebView.NavigationType) -> Bool)?

var webViewDidFinishLoad: ((_ webView: UIWebView) -> ())?
var tapGestureRecogniser:UITapGestureRecognizer?

func configure(from: LinkViewControllerType) {
    self.initialViewController = from

    self.delegate = self
    self.scrollView.delegate = self

    if (self.tapGestureRecogniser == nil) {
        let recog = UITapGestureRecognizer.init(target: self,action: #selector(doubletap(_:)))
        recog.delegate = self
        self.addGestureRecognizer(recog)
        self.tapGestureRecogniser = recog
    }
}

func webView(_ webView: UIWebView,shouldStartLoadWith request: URLRequest,navigationType: UIWebView.NavigationType) -> Bool {
    return shouldStartLoadWith?(webView,request,navigationType) ?? true
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}

@objc func doubletap(_ gestureRecogniser: UITapGestureRecognizer) {
    let touchPoint = gestureRecogniser.location(in: self) as CGPoint
    let imageSrc = String(format: "document.elementFromPoint(%f,%f).src",touchPoint.x,touchPoint.y)
    if let srcOfImage = self.stringByEvaluatingJavaScript(from: imageSrc) {
        if (srcOfImage.contains("http://") || srcOfImage.contains("https://")) {
            self.openImageView(httpUrl: srcOfImage)
        }
    }
}

private func openImageView(fileUrl:URL? = nil,httpUrl:String? = nil) {

    let viewController = ViewControllerManager.Initializers.GuidelineImageViewController()

    if let fileUrl = fileUrl {
        if let imageData = try? Data(contentsof: fileUrl) {
            viewController.image = UIImage(data: imageData)
        }
    } else {
        viewController.httpUrl = httpUrl
    }

    self.initialViewController?.navigationController?.pushViewController(viewController,animated: true)
}

func mailComposeController(_ controller: MfmailComposeViewController,didFinishWith result: mfmailcomposeresult,error: Error?) {
    if let initialViewController = self.initialViewController {
        initialViewController.dismiss(animated: true,completion: nil)
    }
}

func webViewDidFinishLoad(_ webView: UIWebView) {
    webViewDidFinishLoad?(webView)
    let when = DispatchTime.now() + 0.05
    DispatchQueue.main.asyncAfter(deadline: when) {
        self.alpha = 1
    }
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    super.scrollViewDidScroll(scrollView)
    scrollViewDidScroll?(scrollView)
}

override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    scrollViewDidEndDecelerating?(scrollView)
}

override func scrollViewDidEndDragging(_ scrollView: UIScrollView,willDecelerate decelerate: Bool) {
    scrollViewDidEndDragging?(scrollView,decelerate)
}

override func scrollViewWillEndDragging(_ scrollView: UIScrollView,withVelocity velocity: CGPoint,targetcontentOffset: UnsafeMutablePointer<CGPoint>) {
    scrollViewWillEndDragging?(scrollView,velocity,targetcontentOffset)
}}

但是我的这段代码没有被触发

class Wkwebview: WKWebView,WKNavigationDelegate,UIScrollViewDelegate,MfmailComposeViewControllerDelegate{

var initialViewController: LinkViewControllerType?

var isLoadingHTMLString:Bool = false

var scrollViewDidScroll: ((_ scrollView: UIScrollView) -> ())?
var scrollViewDidEndDecelerating: ((_ scrollView: UIScrollView) -> ())?

var scrollViewDidEndDragging: ((_ scrollView: UIScrollView,_ targetcontentOffset: UnsafeMutablePointer<CGPoint>) -> ())?

var decidePolicyFor: ((_ webview: WKWebView,_ request: WKNavigationaction) -> Bool)?

var viewDidLoad: ((_ webView: WKWebView) -> ())?

var tapGestureRecogniser:UITapGestureRecognizer?

func configure(from: LinkViewControllerType) {
    self.initialViewController = from

    self.navigationDelegate = self
    self.scrollView.delegate = self


    if (self.tapGestureRecogniser == nil) {
        let recog = UITapGestureRecognizer.init(target: self,action: #selector(doubletap(_:)))
        recog.delegate = self
        self.addGestureRecognizer(recog)
        self.tapGestureRecogniser = recog
    }
}

func webView(_ webView: WKWebView,decidePolicyFor navigationaction: WKNavigationaction,decisionHandler: @escaping (WKNavigationactionPolicy) -> Void) -> Bool {
    return decidePolicyFor?(webView,navigationaction) ?? true
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,touchPoint.y)
    var srcOfImage = ""

    self.evaluateJavaScript(imageSrc,completionHandler: { (result: Any?,error: Error?) in
        if(error == nil){
            if(result != nil){
                srcOfImage = result as! String
                if (!srcOfImage.isEmptyOrWhitespace()) {
                    if (srcOfImage.contains("http://") || srcOfImage.contains("https://")) {
                        self.openImageView(httpUrl: srcOfImage)
                    }
                }
            }
        }
    })
}

private func openImageView(fileUrl:URL? = nil,completion: nil)
    }
}

func viewDidLoad(_ webView: WKWebView) {
    viewDidLoad(webView)
    let when = DispatchTime.now() + 0.05
    DispatchQueue.main.asyncAfter(deadline: when) {
        self.alpha = 1
    }
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollViewDidScroll?(scrollView)
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    scrollViewDidEndDecelerating?(scrollView)
}

func scrollViewDidEndDragging(_ scrollView: UIScrollView,decelerate)
}

func scrollViewWillEndDragging(_ scrollView: UIScrollView,targetcontentOffset)
}}

在UIWebView上没有问题。它可以正常工作。非常感谢您的协助。

layjung0 回答:从UIWebView迁移到WKWebView(decidePolicyFor navigationAction)无法正常工作

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3156266.html

大家都在问