首页 > 解决方案 > 如何在android中传递一个字符串参数来评估Javascript

问题描述

我试图将字符串参数传递给 Web 应用程序 javascript 代码。传递带有字符串值的变量时失败。但是当我们对数据进行硬编码时,它就起作用了。请让我知道这有什么问题。

工作硬编码代码:

mWebview.evaluateJavascript("cm.setData('N051783')", new ValueCallback<String>() {

     @Override
     public void onReceiveValue(String value3) {

          Log.d(" setData Return Value"," setData Return... "+value3);

     }
});

不使用字符串变量的代码

mWebview.evaluateJavascript("cm.setData("+sub_data+")", new ValueCallback<String>() {

       @Override
       public void onReceiveValue(String value3) {

            Log.d(" sub_data Return Value"," sub_data Return... "+value3);

       }
});

标签: androidandroid-webviewandroid-webview-javascript

解决方案


您可能缺少“”

我在 com.UserProfile 的 JavaScript 函数

function setUserName(name){
   alert('username is ' + name)
}

如何从 Java 调用它

mWebview.evaluateJavascript("com.UserProfile.setUserName("Rohit")",null);

如何传递参数?

您需要连接“与参数。”是一个特殊字符。这就是您可以在字符串中连接 " 的方式。

这是一个例子:

String username = "Rohit";
String func = com.UserProfile.setUserName(\""+ username + "\")";

mWebview.evaluateJavascript(func, null);

您可以使用 StringBuilder 进行连接以及“

让我们逐行分解;

StringBuilder sb = new StringBuilder();
sb.append("com.UserProfile.setUserName")   //com.UserProfile.setUserName
  .append("(")                             //com.UserProfile.setUserName(
  .append("\"")                            //com.UserProfile.setUserName("
  .append(username)                        //com.UserProfile.setUserName("Rohit
  .append("\"")                            //com.UserProfile.setUserName("Rohit"
  .append(")")                             //com.UserProfile.setUserName("Rohit")

 String func = sb.toString();

 mWebview.evaluateJavascript(func, null);
    
     

推荐阅读