iOS 解决Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x16e32ec0 {NS...

iOS8,iOS9注入JS的时候报错如下

-w996

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

原因:

因为iOS10以下版本Webkit版本太低,所以在执行注入JS的时候,查询后得知JS方法中声明属性的用的let,但是在iOS10以下注入WKWebView的时候就会报错,所以为了兼容这个问题,在注入JS的时候系统版本为iOS10以下就要对JS方法中的属性声明替换为var。

解决方法:

方案一(注入JS做替换操作,不科学)

- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
    if (self.playFunc) {
        NSLog(@"replacebefore - > %@",self.playFunc);
        if (IOS10_Before) {
            self.playFunc = [self.playFunc stringByReplacingOccurrencesOfString:@"let " withString:@"var "];
        }
        NSLog(@"replaceend - > %@",self.playFunc);
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self.wkWebView evaluateJavaScript:self.playFunc completionHandler:^(id _Nullable resp, NSError * _Nullable error) {
                self.isIntoJs = !error;
                if (error) {
                    NSLog(@"1注入失败:%@",error.description);
                }else{
                    NSLog(@"2注入成功");
                }
            }];
        });
    }
}
  • 修改前


    -w975
  • 修改后


    -w1115

方案二

下发JS的时候处理,兼容老版本

你可能感兴趣的:(iOS 解决Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x16e32ec0 {NS...)