xcode报错Error Domain=WKErrorDomain Code=4 "发生了JavaScript异常" UserInfo={WKJavaScrip

393 阅读1分钟

在执行以下这段代码后报上面的错误**(jsCode js代码)**

webView.evaluateJavaScript(jsCode) { (result, error) in

if let error = error {

print("JavaScript执行错误: \(error)")

}

}

造成这个错误的原因:

  • 1:你的js代码书写错误,我的js代码中含有空格和换行符导致这个错误的产生.

  • 2:当你执行- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler这个方法的时候一定要确认整个webView已经加载完成,所以这个方法应该写在webView的这个代理方法里面- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation;

解决方案**:**

针对第一个问题,需要去掉首位的空白字符和换行字符等:

// 正确将字典转换为JSON字符串

if let jsonData = try? JSONSerialization.data(withJSONObject: paramsMDict, options: .prettyPrinted),

let jsonString = String(data: jsonData, encoding: .utf8) {

// 注意这里需要对双引号进行转义 + 去掉首尾空白字符和换行字符

let escapedJsonString = jsonString.replacingOccurrences(of: "\"", with: "\\\"").replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: "\r", with: "").replacingOccurrences(of: " ", with: "").trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

let jsCode = "JSBridge.receiveMessageFromNative(\"\(escapedJsonString)\");"

webView.evaluateJavaScript(jsCode) { (result, error) in

if let error = error {

print("JavaScript执行错误: \(error)")

}

}

}