addJavascriptInterface不会返回字符串值android

时间:2010-11-22 07:44:35

标签: 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>

在我的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");
}

我是这个平台的新手,也是javascripting。

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

提前完成。

1 个答案:

答案 0 :(得分:6)

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

class ClsAccessor {
     public void setValue(String value){
           YourOuterClassName.this.clsVariable = value;
     }
}

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

wbvd.addJavaScriptInterface(new ClsAccessor(), "accessor");

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

accessor.setValue('vikrant');

这将导致调用java'setValue()'并且你的字段变量将被设置。

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