2011-12-28 53 views
8

我想知道是否有任何方法可以从本机Android活动调用JavaScript函数。如何直接从Android中的活动调用JavaScript函数?

我碰到:

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

但它没有为我工作。

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

+0

PLZ也投了我的回答... :) – Talha 2012-08-02 04:28:41

回答

13

的Android只能调用JavaScript方法如果HTML页面在web视图当前加载

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

将调用hello方法在仅当当前被加载到web视图控制含有该方法中,页面的HTML页面writen

第一个电话

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

然后调用

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

我已经启用了答案1和2中所述的一切。但没有任何工作。 – Smitha 2011-12-28 10:47:59

+0

请在浏览器上检查您的html页面,并检查您的html页面上是否有任何错误javascript ... – Talha 2011-12-29 04:26:28

+0

解决方案在javascript方法中的参数没有问题。好一个。 – Krystian 2016-12-29 14:57:00

3

使用JavaScript之前,首先必须使用“getJavaScriptEnabled()”(它的默认FALSE)检查Javascript是否已启用。而loadUrl()方法仅用于仅加载当前页面。它不会执行与JavaScript相关的任何操作。

例:

设置的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> 

如何运作? 当文字“Click Me !!”在WebView上单击,调用android函数onJsAlert(WebView视图,String url,String消息,最终的JsResult结果)。要提醒的参数被复制到onJsAlert函数的消息参数。其余的处理在那里完成。 这里我们显示一个AlertDialog。

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