addJavascriptInterface不会返回字符串值android

neh*_*eha 0 javascript android webview

我正在使用以下代码在android中的javascript文件中提取字符串变量:

这个'我的javascript文件:

<script language="javascript">

EDIT:
clsVariable = "vikrant";

function refuseClick(){
clsVariable = "vikrant";
refuse.performClick();
document.getElementById("no").value = "Refuse";
}

</script>

<button type="button" id="no" onClick="refuseClick();">Je refuse</button>

</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在我的android类中,我在点击按钮时编写了以下方法.这个按钮点击事件我是从javascript文件调用的:

    refuse.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {
      Log.v(LOG_TAG, "variable=" + clsVariable);  //This shows me null
 }
 });
 wbvw = (WebView) findViewById (R.id.webvw);

 wbvw.setWebViewClient(new HelloWebViewClient());
    wbvw.getSettings().setJavaScriptEnabled(true);

    WebSettings ws = wbvw.getSettings();
    ws.setJavaScriptEnabled(true);
    wbvw.addJavascriptInterface(clsVariable, "clsVariable");
    wbvw.loadUrl("http://www.sbc.co.in/projects/AndroidTest.html");
}
Run Code Online (Sandbox Code Playgroud)

我是这个平台以及javascripting的新手.

我做错了什么?有人可以帮忙吗?

Thanx提前.

Kon*_*rov 6

看起来你误用了addJavascriptInterface().该方法允许您将一些java对象公开给javascript.然后,您可以使用javascript调用对象的方法,并将这些调用转移到"真正的"java对象.例如,您可以声明这样一个嵌套类来访问您的java字段:

class ClsAccessor {
     public void setValue(String value){
           YourOuterClassName.this.clsVariable = value;
     }
}
Run Code Online (Sandbox Code Playgroud)

然后将该类的实例传递给addJavascriptInterface()方法:

wbvd.addJavaScriptInterface(new ClsAccessor(), "accessor");
Run Code Online (Sandbox Code Playgroud)

然后,要为您的类字段设置一个值,您需要accessor从javascript 调用对象的setValue()方法(例如在单击处理程序中):

accessor.setValue('vikrant');
Run Code Online (Sandbox Code Playgroud)

这将导致调用java'setValue()',并且将设置您的字段变量.

请注意,片段可能不准确,我直接从我的脑袋输入:)但你应该得到原则.希望有所帮助.