2011-12-28 18 views
8

ネイティブAndroidアクティビティからJavaScript関数を呼び出せる方法があるかどうかを知りたいと思っていました。Androidのアクティビティからjavascript関数を直接呼び出す方法は?

私が出会った:

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

しかし、それは私のために動作しませんでした。

また、このJavaScript関数がどのhtmlページに存在するかをAndroidはどのように知っていますか? htmlページが現在のWebViewにロードされている場合

+0

plzはまた、私まで投票Answer ... :) – Talha

答えて

13

アンドロイドはjavascriptのメソッドを呼び出すことができます

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

呼び出しますこんにちは、このメソッドを含むページが現在のWebViewコントロールにロードされている場合にのみ、HTMLページで書か方法

最初の呼び出し

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

その後、呼び出し

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

私は答え1と2で言われたようにすべてを有効にしました。しかし、何も動作しません。 – Smitha

+0

ブラウザでhtmlページを確認してください。あなたのHTMLページjavascriptにエラーがありますか? – Talha

+0

javascriptメソッドの引数で問題なく解決しています。良いですね。 – Krystian

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の設定
webView.setWebChromeClient(new MyJavaScriptChromeClient()); 

MyJavaScriptChromeClientクラス ここでは、JavaScriptアラート関数を処理するためにonJsAlert()メソッドをオーバーライドする必要があります。

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 !!」アンドロイド機能onJsAlert(WebView view、String url、String message、final JsResult result)が呼び出されます。警告するパラメータは、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()"); 
     } 
    }); 
関連する問題