pedant / safe-java-js-webview-bridge

为WebView中的Java与JavaScript提供【安全可靠】的多样互通方案
http://pedant.github.io/2014/07/04/webview-js-java-interface-research/
2.43k stars 567 forks source link

JsCallback.apply(String对象)出错 #11

Open LiJia92 opened 8 years ago

LiJia92 commented 8 years ago

Log:I/chromium: [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected identifier", source: (1)。 我在调用jsCallback.apply()时,传入一个String对象,在apply方法里,有这样的代码:

StringBuilder sb = new StringBuilder();
for (Object arg : args){
    sb.append(",");
    boolean isStrArg = arg instanceof String;
    if (isStrArg) {
        sb.append("\"");
    }
    sb.append(String.valueOf(arg));
    if (isStrArg) {
        sb.append("\"");
    }
}

此方法会在参数首尾加上双引号。此时当传入的String对象包含双引号时(JSONObject.toString()方法生成的String对象就会包含双引号),就会出错。不包含则不会出现问题。 将append里面的双引号改成单引号能解决此问题。但是如果String对象包含单引号就又会导致这个问题了- - 延伸到既包含双引号又包含单引号的String对象又该如何传递呢?