2019-06-12 如何解决wkwebview中js报出的错误:A JavaScript exception occurred

错误描述如下:

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 + "
"; var numRes = "" ........ res += params[i].marker + params[i].seriesName + ":" + numRes + "
"; } 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报出的错误:A JavaScript exception occurred)