将字符串从Java传递给Javascript函数

时间:2014-01-30 06:12:53

标签: java javascript android jquery cordova

对于Phone gap和Java脚本来说,这是一个新手。如果任何人提供样品或sugesstion将有很大帮助。

例外:我遇到以下异常:未捕获TypeError:对象[object Object]没有方法'getName'

public class ViewerActivity extends DroidGap {
    private CordovaActivity mGap;
    private WebView mWebView;

    WebView mWebView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


       mWebView=new WebView(this);
       mWebView.getSettings().setJavaScriptEnabled(true);
       mWebView.addJavascriptInterface(new JavaScriptInterfaceClass (), "jsinterface");
       mWebView.loadUrl("file:///android_asset/www/sample.html");
    }


}

Java Script Interface类:

public class JavaScriptInterfaceClass {
    public WebView mAppView;
    public DroidGap mGap;


public JavaScriptInterfaceClass(DroidGap gap, WebView view) {
    this.mAppView = view;
    this.mGap = gap;

}

public String getName() {


  return "android";
  }
}

HTML:

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="css-js/jquery.mobile-1.0a3.min.css" />
    <script src="css-js/jquery-1.5.min.js"></script>
    <script src="css-js/jquery.mobile-1.0a3.min.js"></script>
</head>
<body>

<script>
    function myFunction()
    {
        var name = jsinterface.getName();
        alert("Hello! I am an alert box!"+name);
    }
    </script>
 <input type="button" onclick="myFunction()" value="Show alert box" />
</body>
</html>

2 个答案:

答案 0 :(得分:1)

班级名称错误。正确的应该是

mWebView.addJavascriptInterface(new JavaScriptInterfaceClass(), "jsinterface");
                                                       ^

答案 1 :(得分:0)

除了在答案中更改班级名称外,您还必须在该功能的前面添加一行。

@Javascriptinterface public String getName(){ (......) }

这可以防止恶意js代码只是拨打可能存在的任何功能