Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在WKWebView完成特定页面的加载和抓取后执行某些操作_Swift_Url_Webview_Uibutton_Reachability - Fatal编程技术网

Swift 在WKWebView完成特定页面的加载和抓取后执行某些操作

Swift 在WKWebView完成特定页面的加载和抓取后执行某些操作,swift,url,webview,uibutton,reachability,Swift,Url,Webview,Uibutton,Reachability,我要做的是,只有在我使用的WKWebView完成加载和抓取页面后,才能执行操作 以下是webView的代码: let webView = WKWebView() let url = URL(string: "https://web.spaggiari.eu/home/app/default/menu_webinfoschool_genitori.php?custcode=")! let request = URLRequest(url: url)

我要做的是,只有在我使用的
WKWebView
完成加载和抓取页面后,才能执行操作

以下是webView的代码:

    let webView = WKWebView()

    let url = URL(string: "https://web.spaggiari.eu/home/app/default/menu_webinfoschool_genitori.php?custcode=")!
        let request = URLRequest(url: url)
        webView.load(request)
我想做的是,只有在进程完成搜索后(特定进程,而不是每次
webView
完成加载时),才显示“连接”按钮。目前,我正在使用
DispatchQueue
等待几秒钟,希望页面能够及时加载

 DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(4)) { 
            UIView.animate(withDuration: 0.8, animations: {
                self.registerButton.alpha = 1
                self.registerButton.isEnabled = true
            })
            UIView.animate(withDuration: 0.8, delay: 0.4, animations: {
                self.blurButton.alpha = 1
            })
        }

我将Xcode与Swift3一起使用

此代码表示页面已完全加载,这对您有帮助吗

func webpageFullyLoaded(_ str: String) {


    if (str == "complete") || (str == "interactive") {

        print("page completely loaded")

    }
}

func webViewDidFinishLoad(_ webView: UIWebView) {


    webpageFullyLoaded(webView.stringByEvaluatingJavaScript(from: "document.readyState"))
}

此代码表示页面已完全加载,这对您有帮助吗

func webpageFullyLoaded(_ str: String) {


    if (str == "complete") || (str == "interactive") {

        print("page completely loaded")

    }
}

func webViewDidFinishLoad(_ webView: UIWebView) {


    webpageFullyLoaded(webView.stringByEvaluatingJavaScript(from: "document.readyState"))
}

WKWebView
有此委托

/*! @abstract The web view's navigation delegate. */
    weak open var navigationDelegate: WKNavigationDelegate?
WKNavigationDelegate
: 符合
WKNavigationDelegate
协议的类可以提供 主框架导航的进度跟踪和决策方法 主帧和子帧导航的策略

此委托有一个方法,可能对您有所帮助

/*! @abstract Invoked when a main frame navigation completes.
     @param webView The web view invoking the delegate method.
     @param navigation The navigation.
     */
    @available(iOS 8.0, *)
    optional public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
所以你可以试试这个

    func loadPage() {
        let webView = WKWebView()
        webView.navigationDelegate = self
        let url = URL(string: "https://web.spaggiari.eu/home/app/default/menu_webinfoschool_genitori.php?custcode=")!
        let request = URLRequest(url: url)
        webView.load(request)

    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // Do your work here
    }
还要确保您的
自我
符合
WKNavigationDelegate

更新

要在同一个WKWebView中处理不同网页的加载,您可以

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {
        print("Page Being loaded is \(navigationAction.request), you can do your work here")
        decisionHandler(.allow)
    }

您可以阅读更多有关导航代理中可以执行的操作的信息

WKWebView
拥有此代理

/*! @abstract The web view's navigation delegate. */
    weak open var navigationDelegate: WKNavigationDelegate?
WKNavigationDelegate
: 符合
WKNavigationDelegate
协议的类可以提供 主框架导航的进度跟踪和决策方法 主帧和子帧导航的策略

此委托有一个方法,可能对您有所帮助

/*! @abstract Invoked when a main frame navigation completes.
     @param webView The web view invoking the delegate method.
     @param navigation The navigation.
     */
    @available(iOS 8.0, *)
    optional public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
所以你可以试试这个

    func loadPage() {
        let webView = WKWebView()
        webView.navigationDelegate = self
        let url = URL(string: "https://web.spaggiari.eu/home/app/default/menu_webinfoschool_genitori.php?custcode=")!
        let request = URLRequest(url: url)
        webView.load(request)

    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        // Do your work here
    }
还要确保您的
自我
符合
WKNavigationDelegate

更新

要在同一个WKWebView中处理不同网页的加载,您可以

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {
        print("Page Being loaded is \(navigationAction.request), you can do your work here")
        decisionHandler(.allow)
    }

您可以在导航代理中阅读更多有关您可以执行的操作的信息“该特定过程”什么过程?在这种情况下,页面已完成加载上面写的url“该特定过程”什么过程?在这种情况下,页面已完成加载上面写的url谢谢!请您解释清楚,因为我是新加入此WebViewDidFinishLoad(UIwebviewdelegate)的人,在加载您的webView时会调用它。我们需要知道您的URL页面何时完全加载以显示connect或您需要的任何内容,所以我显示按钮的代码应该放在if语句中。因此,我使用WKWebView和UIWebView时遇到了一个问题。谢谢!请您解释清楚,因为我是新加入此WebViewDidFinishLoad(UIwebviewdelegate)的人,在加载您的webView时会调用它。我们需要知道您的URL页面何时完全加载以显示connect或您需要的任何内容,所以我显示按钮的代码应该放在if语句中。因此,我使用WKWebView并以您的身份使用UIWebView存在问题。如果WKWebView加载不同页面时我必须执行不同的操作怎么办?如果WKWebView加载不同页面时我必须执行不同的操作怎么办?
/*! @abstract The web view's navigation delegate. */
    weak open var navigationDelegate: WKNavigationDelegate?