如何在Android中直接从活动调用JavaScript函数?

10

我想知道是否有办法从本地Android Activity中调用JavaScript函数。

我找到了以下信息:

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

但对我来说没有起作用。

另外,安卓如何知道这个 JavaScript 函数位于哪个 HTML 页面中?


请也给我的答案点赞... :) - Talha
3个回答

13

只有在webView中当前加载了HTML页面,Android 才能调用 JavaScript 方法。

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

仅当包含此方法的页面当前已在webview控件中加载时,才会调用在HTML页面中编写的 hello 方法。

第一次调用

webview.loadUrl("Your html page url");
然后调用。
webView.loadUrl("javascript:hello()");

2
我已经按照回答1和2中所说的启用了所有内容,但仍然没有效果。 - Smitha
请在浏览器上检查您的HTML页面,并检查您的HTML页面JavaScript是否有任何错误... - Talha
该解决方案在JavaScript方法中使用参数时能够正常工作,非常好。 - Krystian

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()");
        }
    });

3

在使用JavaScript之前,您首先需要使用“getJavaScriptEnabled()”(其默认为FALSE)检查应用程序中是否已启用JavaScript。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函数。

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上的文本“Click Me !!”被点击时,将调用android函数onJsAlert(WebView view,String url,String message,final JsResult result)。 警报的参数被复制到onJsAlert函数的message参数中。 其余处理在那里完成。 在这里,我们正在显示一个AlertDialog。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接