微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

隐藏WKWebView,直到页面加载和JavaScript运行

如何解决隐藏WKWebView,直到页面加载和JavaScript运行

我的目标是隐藏应用程序的嵌入式WKWebView,直到从DOM中删除某些页面元素(例如,页眉和页脚)为止。

我当前的过程如下所示(请参见下面的代码段):

  1. 将WKWebView设置为隐藏(在实例化之后并在didStartProvisionalNavigation钩中)。
  2. 运行JavaScript以删除didFinish navigation钩中的页面元素,并将WKWebView设置为在完成处理程序中可见。
override func webView(_ webView: WKWebView,didStartProvisionalNavigation navigation: WKNavigation!) {
    webView.isHidden = true
}

override func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) {
    var scriptContent = ""
    do {
        scriptContent = try String(contentsOfFile: GlobalVariables.mainScriptURL!,encoding: String.Encoding.utf8)
    } catch {
        print("Error loading JavaScript file.")
    }
    webView.evaluateJavaScript(scriptContent,completionHandler: { result,error in
        webView.isHidden = false
    })
}

GlobalVariables.mainScriptURL内容

$('header').hide();
$('footer').hide();

执行上述代码后,在删除标题之前,我仍然偶尔会看到该标题。我的JavaScript更新DOM和WKWebView重绘其我没有考虑的内容之间是否存在延迟?如何确保在运行JavaScript并从DOM中完全删除那些元素之前,我的用户永远看不到内容

解决方法

是的,不幸的是,我还注意到WKWebView的Web内容过程绘画不一定与您应用程序中的回调同步。在绘画发生之前,您可能会短暂看到内容不正确的信息。

我建议解决此问题的方法是通过注入JavaScript来侦听DOMContentLoaded事件,并在整个Web内容过程中重新格式化。

如果您拥有要加载的内容,那太好了,您只需在<script>上添加一个<head>

如果您不拥有源文档,则可以查看WKUserScript和WKUserContentController,它们应该允许您添加自己的JavaScript而无需修改页面源。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。