美文网首页
19-03-19 解决WKWebView的白屏、js执行时机与字

19-03-19 解决WKWebView的白屏、js执行时机与字

作者: 幸福晓杰2016 | 来源:发表于2019-03-19 15:23 被阅读0次

    这是一篇回忆写的文章,当时开发太忙,无法写下:
    1.白屏问题:
    当app背景是黑色的时候,WKWebView加载时会闪过一篇白色。
    这个问题在UIwebView时代就有了,好像浏览器的背景色一定默认是白色似的。
    先将WKWebView背景色设为黑色,在将html背景色设为黑色
    打上断点,观察UI分层,在里面是有原生UI图层是白色,而且这个子view我们无法操作,尤其是在swift中,KVC编码失效,常量机制。

    解决方法:
    这个方法比较笨,只是能临时解决问题。
    将WKWebView设置为透明色。在加载完html与js文本后,适当延迟0.2s后将透明度改为1
    这个时候白屏闪现的过程就被隐藏掉了。
    原理:父view透明时,子view的颜色不显示
    缺点:有延迟效果。
    改进:1.如果不是黑色或者暗色背景,请不要加这个延迟效果。2.可以在html上面添加一层背景色层,任何时候不轻易更新这个背景色层。

    2.js执行时机:
    WKWebView这点做得比UIWebView好。
    WKWebView的代理方法didFinishedload方法执行后,在执行evaluatejs的方法时,js函数一定可以找到。
    UIWebView的代理方法,haveLoaded之后,执行js方法时,会报错,尤其是一个界面有多个UIWebView组件时,很容易找不到js方法,报错:undefined is not function或者获取的js对象是jsValue(undefined)
    在UIWebView时代,可以采取延迟获取,迭代获取的方法,经过我的实践,4个UIWebView组件,最多的要获取三次,才能获取js对象成功

    3.字体小
    相同的html代码,如果你没有在head部分标注尺寸信息,那么在最终展示上:UIWebView上面的字体明显大于WKWebView

    在head部分添加以下html代码即可

    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'>
    

    如果不一定要求是屏幕宽度,可以改成下面方式也行

    <meta name='viewport' content='width=100%, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'>
    

    相关文章

      网友评论

          本文标题:19-03-19 解决WKWebView的白屏、js执行时机与字

          本文链接:https://www.haomeiwen.com/subject/izngmqtx.html