フロントエンドjsとオリジナルjavaのインタラクション

3252 ワード

フロントエンドjsとオリジナルjavaのインタラクションandroidのアプリケーションでは、webviewのjavascriptコードを直接呼び出すことができ、webviewのjavascriptコードはandroidアプリケーション(javaコード)を呼び出すこともできます.
次はjsとJavaの相互呼び出しの詳細です.
現在のAndroid開発では、大量のH 5(html 5+css 3+js)が使用され、Nativeとともにハイブリッド開発モデル(Hybrid)が使用されているが、Hybrid開発の過程では、H 5部分の開発効率が高く移植の利便性が主であるが、h 5を使用するのは確かに実現しにくい場所もあり、このときJavaメソッドを呼び出していくつかの機能を完成させる必要がある.JavascriptとJavaが互いに呼び出し合うことに遭遇し、Javaの方法でそれらのJavascriptコードを実現するのは容易ではなく、完成しにくいタスク、例えば、非同期スレッド、データベースの呼び出しなど...Android 4.2の前にaddjavascriptinterfaceの方法で原生のJavaに注入し、JavaScriptに呼び出すことができますが、この案には一定のセキュリティリスクがあります.ページで信頼できないJavascriptコードを実行すると、ユーザーの携帯電話を制御することができます.詳細は、WebViewのインタフェースの危険性と携帯電話の馬掛けが4.2後にAndroidが提供した@Javascript Interfaceオブジェクトの注釈を利用してJavascriptオブジェクトとandroidオリジナルオブジェクトのバインドを確立し、javascript呼び出しに提供する関数には@Javascript Interfaceが必要です.現在4.0システムの携帯電話市場の占有量が低いため、minSdkValersonは17で、4.2バージョン以上の携帯電話をサポートするだけで、JavaとJavascriptがどのように通信しているかを見ることができます.ローカルhtmlファイルのロード
Webviewを使用して開発するときにローカルのhtmlファイルを使用する場合がありますが、ここではhtmlファイルをassetsフォルダに配置しやすくするために、ローカルロード方式を使用してserverサポートは必要ありません.htmlファイルを定義します.
this is html
使用file:///android_asset/index.htmlをwebviewにロード:private void initView(){webView=(WebView)findView ById(R.id.webView);webView.loadUrl("file:///android_asset/index.html”); }
1.Javascript呼び出しJavaメソッドAndroidのToastを例に、JavascriptコードからシステムのToastを呼び出す.Android ToastのJavaクラスを定義します.Toast:publicclassAndroid Toast{@JavascriptInterface public void show(String str){Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show()}}WebViewにパラメータを設定し、JavaScriptを開き、JavascriptInterface:private void initView()を登録する必要があります.{ webView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);//        
    webSettings.setDefaultTextEncodingName("UTF-8");
    webView.addJavascriptInterface(new AndroidToast(), "AndroidToast");
    webView.loadUrl("file:///android_asset/index.html");

}addJavascriptInterfaceの役割は、Android ToastクラスをJavascriptのAndroid Toastオブジェクトにマッピングすることです.JavascriptでJavaコードを呼び出します:function toastClick(){window.Android Toast.show('from js);}Windowsのプロパティを使用すると、JavaマッピングのオブジェクトAndroid Toastを見つけ、そのshowメソッドを呼び出すことができます.ここで転送されるデータは、基本的なデータ型とstringのみであり、stringを転送できることは、jsonを使用して構造化されたデータを転送できることを意味します.
2.Javascript Java呼び出しJava戻り値Javascript調のメソッドから戻り値を取得するには、戻り値付き@Javascript Interfaceメソッドを定義するだけです:public class Android Message{@JavascriptInterface public String getMsg(){return"form java"}}JavascriptのマッピングWebview:webView.addJavascriptInterface(new Android Message()、"Android Message");Javascript直接Javaメソッドを呼び出す:function showAlert(){var str=window.Android Message.getMsg();console.log(str);}
3.Java Java呼び出しJavascriptメソッドJava jsを呼び出すときに使用するのはWebView.loadUrl()メソッドです.HTMLページでJavaScriptメソッドを直接実行できます.まずJavascriptメソッドを定義してJava呼び出します.function callFromJava(str){console.log(str);}Java側呼び出しJavascriptメソッド:publicvoidjavaCallJS(){webView.loadUrl("javascript:callFromJava(‘call from java’);}loadUrlでJavascriptメソッドに直接値を渡すことができます.Javascriptメソッドに戻り値がある場合、WebView.loadUrl()は戻り値を取得できません.Javascriptの戻り値がJavaに必要な場合は、Java Script呼び出しに戻り値をJavaに渡すJavaメソッドを定義できます.注意WebView.loadUrl()UIスレッドで実行する必要があります.そうしないと、エラーが発生します.