ইউআইবিউবভিউ থেকে ডাব্লুকেউব ভিউতে স্থানান্তরিত হচ্ছে


106

আমার অ্যাপ্লিকেশনটিতে আমি ইউআইবিউবভিউ থেকে ডব্লিউকেউইউভিউতে স্থানান্তরিত করছি, কীভাবে আমি এই ফাংশনটি ডব্লিউকেউবউইউয়ের জন্য পুনরায় লিখতে পারি?

    func webViewDidStartLoad(webView: UIWebView){}
    func webViewDidFinishLoad(webView: UIWebView){}

এবং

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        print("webview asking for permission to start loading")
        if navigationType == .LinkActivated && !(request.URL?.absoluteString.hasPrefix("http://www.myWebSite.com/exemlpe"))!{
            UIApplication.sharedApplication().openURL(request.URL!)
            print(request.URL?.absoluteString)
            return false
        }
        print(request.URL?.absoluteString)
        lastUrl = (request.URL?.absoluteString)!

        return true
    }


    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
        print("webview did fail load with error: \(error)")
        let testHTML = NSBundle.mainBundle().pathForResource("back-error-bottom", ofType: "jpg")
        let baseUrl = NSURL(fileURLWithPath: testHTML!)

        let htmlString:String! = "myErrorinHTML"
        self.webView.loadHTMLString(htmlString, baseURL: baseUrl)
    }

আপনি মত শোনাচ্ছে কটাক্ষপাত করা উচিত navigationDelegateএর WKWebView
luk2302

একই ইস্যু - আপনি সাহায্য করতে পারে - stackoverflow.com/questions/46793618/ios-wkwebview-vs-uiwebview
Krunal

উত্তর:


205

UIWebView => WKWebView সমতুল্য

didFailLoadWithError => didFailNavigation
webViewDidFinishLoad => didFinishNavigation
webViewDidStartLoad => didStartProvisionalNavigation
shouldStartLoadWithRequest => decidePolicyForNavigationAction

সম্পর্কে shouldStartLoadWithRequestআপনি লিখতে পারেন:

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
    print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")

    switch navigationAction.navigationType {
        case .LinkActivated:
        if navigationAction.targetFrame == nil {
            self.webView?.loadRequest(navigationAction.request)
        }
        if let url = navigationAction.request.URL where !url.absoluteString.hasPrefix("http://www.myWebSite.com/example") {
            UIApplication.sharedApplication().openURL(url)
            print(url.absoluteString)
            decisionHandler(.Cancel)
        return
        }
        default:
            break
    }

    if let url = navigationAction.request.URL {
        print(url.absoluteString)
    }
    decisionHandler(.Allow)
}

এবং এর জন্য didFailLoadWithError:

func webView(webView: WKWebView, didFailNavigation navigation: WKNavigation, withError error: NSError) {
    print("webView:\(webView) didFailNavigation:\(navigation) withError:\(error)")
    let testHTML = NSBundle.mainBundle().pathForResource("back-error-bottom", ofType: "jpg")
    let baseUrl = NSURL(fileURLWithPath: testHTML!)

    let htmlString:String! = "myErrorinHTML"
    self.webView.loadHTMLString(htmlString, baseURL: baseUrl)
}

1
ওয়েবভিউডিডফিনিশলুড এবং ডিড ফিনিশনাভিগেশন হুবহু এক নয়। পৃষ্ঠাটি সম্পূর্ণ লোড হওয়ার আগেই ডিডফিনিশ নেভিগেশন পদ্ধতিটি ডাকা হয়।
মিশাল সিচন

ডকুমেন্টেশন বলে যে এই পদ্ধতিটি কেবল অক্সের জন্য। প্রশ্নটি আইওএস
গারগো

1
@Gargo উভয় বর্ণনার দেখে নিন: webViewDidFinishLoad , didFinishNavigation , যেমন আপনি দেখতে iOS এর জন্য 8.0+ পাওয়া যায়
আলেসান্দ্রো Ornano

stackoverflow.com/questions/46171410/… - কেউ এই সমস্যাটি আমাকে সহায়তা করে @AlessandroOrnano
শিভা

4
কেবল সংক্ষেপে নোট করুন যে এই পদ্ধতিগুলিতে ঘোষিত হয়েছে WKNavigationDelegate(নয় WKUIDelegate)।
মাইক কেসকিনভ

30

স্থানান্তরের জন্য এখানে উদ্দেশ্য-সি পদ্ধতি রয়েছে

1) স্টার্টলডড উইথ রিকুইয়েস্ট -> ডিসিপলিসি ফরওয়ার্ড নেভিগেশন অ্যাকশন

কল করতে মনে রাখবেন decisionHandler

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
       if (navigationAction.navigationType == UIWebViewNavigationTypeLinkClicked) {

       }
       NSString *url = [navigationAction.request.URL query];

       decisionHandler(WKNavigationActionPolicyAllow);
}

2) ওয়েবভিউডিডস্টার্টলুড -> ডিস্টার্টপ্রভিশনাল নেভিগেশন

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
}

3) ওয়েবভিউডিডফিনিশলুড -> ডিফিনিশনাভিগেশন

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
}

4) didFailLoadWithError -> didFailNavication

- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
}

3
WKNavigationTypeLinkActivatedতার চেয়ে UIWebViewNavigationTypeLinkClickedকি হওয়া উচিত ?
কাপউনটাএ

12

ইউকেউইউভিউ ভিউকে ডব্লিউকেউব ভিউতে স্যুইফট 4 এ স্থানান্তরিত করা হচ্ছে :

এর সমতুল্য shouldStartLoadWithRequest:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    var action: WKNavigationActionPolicy?

    defer {
        decisionHandler(action ?? .allow)
    }

    guard let url = navigationAction.request.url else { return }

    print(url)

    if navigationAction.navigationType == .linkActivated, url.absoluteString.hasPrefix("http://www.example.com/open-in-safari") {
        action = .cancel                  // Stop in WebView
        UIApplication.shared.openURL(url) // Open in Safari
    }
}

এর সমতুল্য webViewDidStartLoad:

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    print(String(describing: webView.url))
}

এর সমতুল্য didFailLoadWithError:

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
    let nserror = error as NSError
    if nserror.code != NSURLErrorCancelled {
        webView.loadHTMLString("404 - Page Not Found", baseURL: URL(string: "http://www.example.com/"))
    }
}

এর সমতুল্য webViewDidFinishLoad:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    print(String(describing: webView.url))
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.