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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容