2018.9.5
问题描述#
最近遇到一个神奇的Bug,通过UIWebView的stringByEvaluatingJavaScriptFromString:方法执行一段JavaScript代码时,JavaScript报错:
SyntaxError: Unexpected EOF
经过仔细的排查,发现待执行的JavaScript代码里面包含U+2028字符。还找到了Stack Overflow相关讨论。
JavaScript解析器会把行分隔符U+2028和段落分隔符U+2029解析成一行的结束,代码里要是包含这两个字符相当于换行,例如:
alert("\u2028")
就会被解析为
alert(" “)
于是就产生了语法错误。
解决方案#
我用的方法比较简单、粗暴,在执行JavaScript代码前,直接过滤掉这两个字符。代码如下:
//
javaScriptString = [javaScriptString stringByReplacingOccurrencesOfString:@"\u2028" withString:@""];
javaScriptString = [javaScriptString stringByReplacingOccurrencesOfString:@"\u2029" withString:@""];
NSString* ret = [(UIWebView*)_engineWebView stringByEvaluatingJavaScriptFromString:javaScriptString];



