oc与js交互之引号处理问题
测试系统:ios10、ios11
比如向webview中插入html代码时执行如下操作
htmlStr 为需要插入的html字符串
[webview evaluateJavaScript:[NSString stringWithFormat:@"document.body.innerhtml='%@'",htmlStr] completionHandler;nil];
如果htmlStr中含有单引号 ' ,此时会与'%@' 中的外部引号冲突,导致该段js代码执行失败,需要将htmlStr中的单引号替换为转义符,
' ----单引号
' ----单引号(兼容IE)
"" -----双引号
例如在执行js方法前将htmlStr中的单引号替换为转义符再使用
[htmlStr replaceOccurrencesOfString:@"'" withString:@"'" options:0 range:NSMakeRange(0, htmlStr)];
更正一下:以上虽然可以顺利将htmlStr传给js并能显示成功,但是存在一个问题,比如标签<div class='temp'></div> ,如果使用转义符替换了单引号,但是在js中加载过程中会被safari解释成 <div class="'temp'"></div>,导致多出一对双引号出来,因此在将字符串传给js时不能使用替换成转义符的方式;目前的处理方式如下:
[htmlStr replaceOccurrencesOfString:@"'" withString:@"#yingwenfenhao" options:0 range:NSMakeRange(0, htmlStr)];
将单引号替换为特殊标识字符串,并在传入的js方法中替换回来
如:
function AddContent(content) {
content = content.replace(new RegExp('#yingwenfenhao', 'gm'), "'");
document.body.innerHtml = content;
}