美文网首页
2019-06-12 如何解决wkwebview中js报出的错误

2019-06-12 如何解决wkwebview中js报出的错误

作者: 幸福晓杰2016 | 来源:发表于2019-06-12 16:16 被阅读0次

    错误描述如下:

    Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x7bfb3c30 {NSLocalizedDescription=A JavaScript exception occurred}

    这条错误信息不显示js报错的在哪一行,也不现实js错误提示信息,我们该如何处理这类错误呢?
    我查了很多资料,并不能解决问题,知道我发现这个回答:
    https://stackoverflow.com/questions/28964387/send-data-to-wkwebview
    stackoverflow上有人提出这个问题的一种解决方式:

    being executed, which is not valid JS.
    

    我因此联想到,这种错误提示,不是在js文件中执行报错,也不是js函数名找不到,而是:

    它压根不是一个合法js函数调用方式。
    

    从这点出发,我说说我的问题:我向WKWebView传值,在iOS10-12系统上一点没有问题,在iOS9上立马出现上述错误。我应该从js的调用形式上出发。
    函数名(参数)
    这就是最基本的js调用方式,函数名没啥问题,问题出在参数上,
    只能说苹果在iOS10之后,做了传参的优化,使得参数兼容性大幅提高。

    我使用简单差异性对比实验的方法:
    我写一个简单的js函数,然后在已知确定参数里面传入一些无关参数。这些参数就是我上面js函数里传递的复杂参数的一部分。
    只要出现错误,即参数形式不被认可。
    没出现错误,参数形式被iOS9系统认可。
    以jsFunc({key:String})为例(iOS语言swift)
    通过研究发现:
    1.String里面不能出现",必须使用单引号
    否则iOS9系统传参时报错。
    2.String必须字符串,不能出现可选值类型
    否则iOS9系统传参时报错。
    3.key:value 只能是传统的json格式,不能像echart里面直接可以函数的方式json配置(类似js对象),如下所示传参,iOS9报错

    formatter: function(params) {
          var res = params[0].name + "<br />";
          var numRes = ""
            ........
            res += params[i].marker + params[i].seriesName + ":" + numRes + "<br />";
          }
          return res;
        },
    

    后续补充:NSLocalizedDescription=A JavaScript exception occurred 这种描述只存在iOS9系统中。
    通过上述方法,我可以将参数传递过去。
    然后新的问题出现了,依然报这种错误:A JavaScript exception occurred(iOS9的系统开发者是多懒啊。)
    其实这个错误是我将jsfunc给注释了,在iOS10中会报错:js函数找不到。
    另外:
    采用js文件注入的方式添加函数,在iOS9中会始终报错:
    A JavaScript exception occurred。
    我猜测它的本意是js函数找不到。可能iOS9中的WKWebView evaluateJavaScript(_:completionHandler:) 方法只会在html的Script标签中找已存在js函数吧,注入的js函数根本不在它查找的范围吧。

    相关文章

      网友评论

          本文标题:2019-06-12 如何解决wkwebview中js报出的错误

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