通过android webView JavascriptInterface传递字符串时,字符串替换不起作用

时间:2013-11-29 02:17:17

标签: java javascript android webview

当我通过JavaScriptInterface将Java String传递到android webView时,我遇到了一个字符串替换问题。

下面是webView中的HTML(utf-8文件):

 <html>
  <head>
    <script type="text/javascript">

        a=window.MyAndroid.getPicEncStr(); //get string from Java side.        

        function getValue(){    
            b="ue";     

            if(a==b) {
                d="match";
            } else {
                d="not match";
            }

            c=d+":"+a.replace("u","0")+b.replace("u","0");
            document.getElementById("test").innerHTML=c;           
        }
    </script>   
  </head>
  <body>
    <span id="test">test</span>
  </body>
</html>

JavaScriptInterface代码如下:

import java.io.UnsupportedEncodingException;

import android.content.Context;

public class JavaScriptInterface {

    private String unicodeToUtf8(String s) {
        String str=null;
        try {
            str=new String( s.getBytes("utf-8") , "utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return str;
    }

    public String getPicEncStr() {
        //return "ue"; //not work
        return this.unicodeToUtf8("ue"); //not work
    }
}

当我调用webView.loadUrl(“javascript:getValue()”)时,无论是从“unicode”转换为“utf-8”,span(“id”=“test”)的结果都是“match:ue0e” “不是。

基本上字符串“a”等于字符串“b”,但替换函数不适用于a,仅适用于b。

有人可以帮我吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我似乎找到了解决问题的方法:

<html>
  <head>
    <script type="text/javascript">

        a=window.MyAndroid.getPicEncStr(); //get string from Java side.        

        function getValue(){    
            b="ue";     

            if(a==b) {
                d="match";
            } else {
                d="not match";
            }
            a=new String(a); //<-- force convert java string to javascript string.
            c=d+":"+a.replace("u","0")+b.replace("u","0");
            document.getElementById("test").innerHTML=c;           
        }
    </script>   
  </head>
  <body>
    <span id="test">test</span>
  </body>
</html>

仍然不明白为什么。当我转储“a”时,它显示“ ue ”,当我尝试转储“a [0]”时,它显示“未定义”,但是“b [0 ]“是”“,我只能将图像与Java / Javascript字符串相互兼容,因此,需要进行显式转换。