ios - 如何在swift5中从WKWebviews预加载WKWebviews

标签 ios swift wkwebview preload

我有两个独立的WKWebViewController。当按下按钮时,我先加载WKWebView,然后加载另一个WKWebView

所以我想提前加载另一个WKWebView。我怎样才能做到这一点?

两个ViewController均具有WKWebView。

mainstory

第一个WKWebView

    func openSecondScreen(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let openSecondScreen = storyboard.instantiateViewController(withIdentifier: "SecondWebViewController") as! SecondWebViewController
        openSecondScreen.modalPresentationStyle = .overCurrentContext
        openSecondScreen.modalTransitionStyle = .crossDissolve
        openSecondScreen.delegate = self
        self.navigationController?.pushViewController(openSecondScreen, animated: true)
    }

第二个WKWebView

    @IBOutlet var secondWKWebView: WKWebView!
    override func loadView() {
        super.loadView()

        let images = global.getIndicatorImage()
        let animatedImage = UIImage.animatedImage(with: images, duration: 1.0)
        self.indicatorImage.image = animatedImage


        contentController.add(self, name: "SecondWeb")

        config.userContentController = contentController

        secondWKWebView = WKWebView(frame: secondWKWebView.frame, configuration: config)

        secondWKWebView.uiDelegate = self
        secondWKWebView.navigationDelegate = self

        view.addSubview(secondWKWebView)
        view.addSubview(indicator)

        if contentController.userScripts.count > 0 {
            contentController.removeAllUserScripts()
        }
        let  localFilePath = Bundle.main.url(forResource: webUrl, withExtension: "html")
        let  myRequest = URLRequest(url: localFilePath)
        secondWKWebView.load(myRequest)
    }

我怎么解决这个问题?

最佳答案

我想我找到了解决方案。但是有一个问题。我仍然可以看到指示器的动画图像。我认为搜索不完整。

第一个WKWebView

    var openSecondScreen : SecondWebViewController!
    var preloadCheck = false
   ...
    func openSecondScreen(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        openSecondScreen = storyboard.instantiateViewController(withIdentifier: "SecondWebViewController") as! SecondWebViewController
        openSecondScreen.delegate = self
        openSecondScreen.loadViewIfNeeded()
        openSecondScreen.secondWKWebView.uiDelegate = self
        openSecondScreen.secondWKWebView.navigationDelegate = self
        preloadCheck = true
    }
....
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        if preloadCheck {
            self.navigationController?.pushViewController(openSecondScreen, animated: true)
            preloadCheck = false
        }
    }

第二个WKWebView

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        indicatorImage.isHidden = true
        indicatorImage.stopAnimating()
    }

因此,我通过在显示屏幕时隐藏指示器图像来解决此问题。

第二个WKWebView

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        indicatorImage.isHidden = true
        indicatorImage.stopAnimating()
}

当您按下按钮以打开secondWebview屏幕时,firstWebview屏幕上显示指示器图像,导航完成后指示器图像消失,并且secondWebview屏幕出现preloaded

关于ios - 如何在swift5中从WKWebviews预加载WKWebviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58796829/

相关文章:

javascript - 在 JavaScript 中检测页面是否加载到 WKWebView 中

swift - wkwebview 自动填写登录表单 swift 2

ios - 集群时显示 MKAnnotation 标注

dictionary - 在 Swift 中打印字典值

swift - 如何在自定义 NSToolbar 中使用来自 OS X 邮件程序的工具栏图像?

ios - 如何在加载应用程序和完全加载网页 View 页面之前直接添加启动画面图像?

html - 在 Swift 中访问 HTML 表格数据

php - 检查POST中是否存在key:value对

ios - 处理多种语言的 UITextField

ios - 如何从模态 XIB 设置 VC 的背景颜色