如何直接从Android中的活动调用javascript函数?

时间:2011-12-28 10:02:30

标签: javascript android

我想知道是否有任何方法可以从原生Android Activity调用JavaScript函数。

我遇到了:

webView.loadUrl("javascript:hello()");

但它对我不起作用。

此外,Android将如何知道此JavaScript函数驻留在哪个html页面中?

3 个答案:

答案 0 :(得分:13)

如果当前在webView中加载了html页面,Android只能调用javascript方法

webView.loadUrl("javascript:hello()");
仅当包含此方法的页面当前在webview控件中加载时,

才会在html页面中调用hello方法

先打电话

webview.loadUrl("Your html page url");

然后致电

webView.loadUrl("javascript:hello()");

答案 1 :(得分:10)

如果有人像我一样有任何问题,你需要在页面加载完成后调用你的javascript函数,否则不会调用javascript:

    webviewer.loadUrl("file:///android_asset/mypage.html");
    webviewer.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url)
        {
            webviewer.loadUrl("javascript:hello()");
        }
    });

答案 2 :(得分:3)

在使用JavaScript之前,首先必须使用“getJavaScriptEnabled()”检查应用程序中是否启用了Javascript(默认值为FALSE)。而loadUrl()方法仅用于加载当前页面。它没有做任何与JavaScript相关的事情。

实施例

设置WebView

// webview的初始化

webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

在WebView中加载HTML

webView.loadUrl("file:///android_asset/testhtml.html");

将WebChromeClient设置为webView

webView.setWebChromeClient(new MyJavaScriptChromeClient());

MyJavaScriptChromeClient类 在这里,我们必须重写onJsAlert()方法来处理JavaScript Alert Function。

private class MyJavaScriptChromeClient extends WebChromeClient {
  @Override
  public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {
//handle Alert event, here we are showing AlertDialog
    new AlertDialog.Builder(MainWebViewActivity.this)
       .setTitle("JavaScript Alert !")
       .setMessage(message)
       .setPositiveButton(android.R.string.ok,
           new AlertDialog.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {
                     // do your stuff
                     result.confirm();
               }
           }).setCancelable(false).create().show();
   return true;
  }
}

我的Html文件: testhtml.html:

<html>

  <body >

    <div onclick="alert('hello')"> Click Me !!  </div>

  </body>

</html>

它是如何工作的? 当文字“点击我!!”单击WebView,调用android函数onJsAlert(WebView视图,String url,String消息,最终JsResult结果)。 alert的参数被复制到onJsAlert函数的message参数中。剩下的处理工作就在那里完成。 这里我们显示一个AlertDialog。