WKWebView запрос загрузки в устройстве не работает, но симулятор работает - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть вопрос о WKWebview.
Во-первых, у меня есть UITabbarViewController (tab1, tab2) и два ViewController.
В ViewController1 есть две кнопки (button1, button2), действие которых заключается в нажатии вкладки tab2 дляпредставить ViewController2 и принести другую строку URL.
В ViewController2 есть WKWebView и загрузить запрос строки URL.
Я отлично работаю в симуляторе, но вначале работаю в устройстве и работаю нормально, а затем нажимаюпанель вкладок tab1 и обратно к ViewController1.
Я нажимаю кнопку2 и представляю ViewController2.
И я также устанавливаю точку останова, WKWebview запустил функцию запроса загрузки.
Но WKWebview также показывает мне URL-адрес button1содержание, а не button2 содержание URL.Когда я возвращаюсь и снова нажимаю кнопку2, это работает.Почему WKWebView не обновляется в первый раз?
Спасибо.
Xcode 9.4.1, устройство iOS 12.0.1 (16A404)

class ViewController1: UIViewController {

@objc func btnTapped(sender: UIButton) {

    if let vc = self.navigationController?.parent as? ViewController {
        if let number = item?.number {

            let domainPath = “\(customURL!.absoluteString)"
            let extPath = "detail/\(number)/&topPageBack=list"
            let encodestr = extPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
            let finalPath = domainPath.appending("/").appending(encodestr!)

            if let url = URL(string: finalPath) {
                vc.loadSpecificURL = url
            }
            vc.tabBarView.buttonClick(tag: 1)
        }
    }
}
}


class ViewController2: UIViewController {

lazy var webViewController: CustomWKWebViewController = {
    let controller = CustomWKWebViewController()
    controller.wKWebViewPage = .searchPage
    return controller
}()

var loadURL: URL?

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if let url = loadURL {
        webViewController.reloadWebView(url: url)
        loadURL = nil
    }

}

}


class CustomWKWebViewController: UIViewController {

private func settingWebView() -> WKWebView {
    let userScript = WKUserScript(source: source, injectionTime: .atDocumentStart, forMainFrameOnly: true)

    let userContentController = WKUserContentController()
    userContentController.add(self, name: "Login")  
    userContentController.add(self, name: "Other")
    userContentController.add(self, name: “LD”)
    userContentController.addUserScript(userScript)                     

    let config = WKWebViewConfiguration()                   
    config.userContentController = userContentController

    webView = WKWebView(frame: .zero, configuration: config)
    webView!.navigationDelegate = self
    webView!.uiDelegate = self
    webView!.scrollView.bounces = false
    webView!.allowsBackForwardNavigationGestures = true
    webView!.backgroundColor = .clear
    webView!.scrollView.backgroundColor = .clear

    if let request = getRequest() {
        webView!.load(request)
    }
    return webView!
}

func reloadWebView(url: URL?) {

    if let url = url, let webView = self.webView {
        var requestForBlank = URLRequest(url: URL(string: "about:blank")!, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 3)
        requestForBlank.httpMethod = "POST"

        var request = URLRequest(url: url, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 3)
        request.httpMethod = "POST"

        webView.load(requestForBlank)
        webView.load(request)//breakpoint always break here, but the view don't load request.
    }
}

}

1 Ответ

0 голосов
/ 24 декабря 2018

Сначала вы проверяете, не является ли веб-адрес ноль, а затем вызываете остальную часть if.

if let url = webview.url {
    webview.reload()
} else {
    webview.load(URLRequest(url: originalURL))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...