oc与js交互之引号处理问题

2018-03-11  本文已影响0人  GoldenChan

测试系统: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;

}

上一篇下一篇

猜你喜欢

热点阅读