美文网首页
oc与js交互之引号处理问题

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

作者: GoldenChan | 来源:发表于2018-03-11 11:11 被阅读0次

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

    }

    相关文章

      网友评论

          本文标题:oc与js交互之引号处理问题

          本文链接:https://www.haomeiwen.com/subject/algifftx.html