Android:javaとjavascriptはお互いに呼出します.
11755 ワード
一:WebViewの簡単な理解
1.基本的に最も重要なのは、Android Manifest.xmlにアクセス権限を追加しなければならないことです.
android:name=「android.permission.INTERNET」 />
2.訪問ページにJavascriptがあれば、WebViewはJavascriptをサポートするように設定しなければなりません.そうでなければ、下のページは全部無駄遣いです.
方式1:比較的古い方式ですので、使うことを勧めません.
注意:
有名になって久しい任意の命令は、脆弱性を実行し、addJavascript Interface方法によって、JsはJavaオブジェクト方法を呼び出すことができ、反射メカニズムによって、Jsは直接にRuntimeを取得し、任意のコマンドを実行することができます.Android 4.2以上は、文@Javascript Interfaceを通じて安全性を保証できます.Android 4.2の前にaddjavascript interfaceを使用してオリジナルのJavaに注入し、JavaScriptに呼び出すことができますが、このような案は一定のセキュリティリスクがあります.詳しくは、WebViewの中には携帯電話との接続が隠れています.「とにかく4.2以下の携帯はほとんどないので、ここでは知るしかないです.」
1.JS呼び出しJava方法:
呼び出しフォーマットはwindow.js InterfaceName.methodNameです.この例では、注入インターフェース名としてredを使っています.
MainActivityコード:
Javaはjsを呼び出す時、WebView.loadUrl()の方法を使って、直接HTMLページの中でJavaScriptの方法を実行することができます.
MainActivityコード:
知らない仲間に助けてもらいたい!!!
関連資料リンク:
1.WebViewを深く説明する——上
2.Androidのwebviewは、jsを通じてjavaメソッドを呼び出します.
3.Android Webview JavaとJavascriptのセキュリティインタラクション+Android:javaとjavascriptはお互いに呼応します.【安全問題の解説がやや多く、重要なのもこの招待状の中で体現しています.】
4.AndroidではJavaとJavaScriptがインタラクティブである【説明のほうが分かりやすい】
5.androidソフトウェア開発のwebView.addJavascript Interface循環は漸進的に【一】【解説が多いですが、実はこのスレッドにはすでに含まれています.しかし、本人が接触したばかりの時には、やはり多くの収穫をもたらしてくれます.ここで備考してください.】
1.基本的に最も重要なのは、Android Manifest.xmlにアクセス権限を追加しなければならないことです.
android:name=「android.permission.INTERNET」 />
2.訪問ページにJavascriptがあれば、WebViewはJavascriptをサポートするように設定しなければなりません.そうでなければ、下のページは全部無駄遣いです.
WebView.getSettings().setJavaScriptEnabled(true);
3.もしページのリンクをクリックしたいなら、リンクをクリックして現在のbrowserの中で応答し続けてほしいです.Androidを新しくオープンしたシステムbrowserの中ではなく、リンクすべきことがあります.WebViewのWebViewCientオブジェクトをカバーしなければなりません.mWebView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
});
4.何の処理もしないなら、ウェブページを閲覧し、システム「Back」ボタンをクリックして、全体のBrowserはfinishを呼び出して自分を終了します.ブラウザーを起動するのではなく、ブラウザーを立ち上げるのであれば、現在のActivityでこのBackイベントを処理して消費する必要があります.方式1:比較的古い方式ですので、使うことを勧めません.
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
方式2:Activityには物理戻りキーの傍受イベントがあります.直接使用できます.@Override
public void onBackPressed() {
if(web_view.canGoBack()){
web_view.goBack();
return;
}else{
this.finish();
}
}
二:Android原生とJSの相互作用が正式に始まります.注意:
有名になって久しい任意の命令は、脆弱性を実行し、addJavascript Interface方法によって、JsはJavaオブジェクト方法を呼び出すことができ、反射メカニズムによって、Jsは直接にRuntimeを取得し、任意のコマンドを実行することができます.Android 4.2以上は、文@Javascript Interfaceを通じて安全性を保証できます.Android 4.2の前にaddjavascript interfaceを使用してオリジナルのJavaに注入し、JavaScriptに呼び出すことができますが、このような案は一定のセキュリティリスクがあります.詳しくは、WebViewの中には携帯電話との接続が隠れています.「とにかく4.2以下の携帯はほとんどないので、ここでは知るしかないです.」
1.JS呼び出しJava方法:
呼び出しフォーマットはwindow.js InterfaceName.methodNameです.この例では、注入インターフェース名としてredを使っています.
MainActivityコード:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
web_view = (WebView) findViewById(R.id.content_web_view);
web_view.getSettings().setJavaScriptEnabled(true);// js
web_view.loadUrl("www.google.com");// html
web_view.addJavascriptInterface(new RedJavascriptInterface(), "red");// js
}
public final class RedJavascriptInterface {
//@JavascriptInterface , Android js
@JavascriptInterface
public void closeActivity() {
//JS
Activity.this.finish();
}
/**
* * js Java
* * bookingNum:
**/
@JavascriptInterface
public void callToBooking(String bookingNum) {
//
Uri uri = Uri.parse("tel:" + bookingNum);
Intent dialIntent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(dialIntent);
}
/**
* * java js
* *
**/
@JavascriptInterface
public String findLocation() throws JSONException {
JSONObject obj = new JSONObject();
obj.put("lat", currentLat + "");
obj.put("lng", currentLon + "");
obj.put("regionName", regionName);
obj.put("location", location);
JSONObject object = new JSONObject();
object.put("res_code", "1");
object.put("res_message", obj);
return object.toString();
}
}
index.コード:"text/javascript"</span>>
function back(){
window.red. closeActivity()<span style="color:#cc7832;">;
</span>}
function call(){
window.red. callToBooking(<span style="color:#6a8759;">"13218615698"</span>)<span style="color:#cc7832;">;
</span>}
var locationStr = window.red. findLocation()<span style="color:#cc7832;">;</span><span style="color:#808080;">// , js !!
</span>
2.Java Jsメソッドを呼び出す:Javaはjsを呼び出す時、WebView.loadUrl()の方法を使って、直接HTMLページの中でJavaScriptの方法を実行することができます.
MainActivityコード:
// java js ,
public void sendInfoToJs1() {
webView.loadUrl("javascript:sayHello()");
}
// java js ,
public void sendInfoToJs2(String str) {
// js :showInfoFromJava(msg)
webView.loadUrl("javascript:showInfoFromJava('" + str + "')");
}
private void testEvaluateJavascript(WebView webView) {
webView.evaluateJavascript("getGreetings()", new ValueCallback() {
@Override
public void onReceiveValue(String value) {
Log.i(LOGTAG, "onReceiveValue value=" + value);
}
});
}
index.コード:"text/javascript"</span>>
function sayHello() {
alert(<span style="color:#6a8759;">"Hello"</span>)
}
function showInfoFromJava(msg){
alert(<span style="color:#6a8759;">" :"</span>+msg)<span style="color:#cc7832;">;
</span>}
function getGreetings() {
<span style="color:#cc7832;">return </span><span style="color:#6897bb;">1</span><span style="color:#cc7832;">;
</span>}
やっと整理が終わりました.整理してから自分の頭もはっきりしました.使うたびにgoogleを導出しなくてもいいです.iOSと共同開発した原因かもしれません.このような知識で、いつも混同しています.知らない仲間に助けてもらいたい!!!
関連資料リンク:
1.WebViewを深く説明する——上
2.Androidのwebviewは、jsを通じてjavaメソッドを呼び出します.
3.Android Webview JavaとJavascriptのセキュリティインタラクション+Android:javaとjavascriptはお互いに呼応します.【安全問題の解説がやや多く、重要なのもこの招待状の中で体現しています.】
4.AndroidではJavaとJavaScriptがインタラクティブである【説明のほうが分かりやすい】
5.androidソフトウェア開発のwebView.addJavascript Interface循環は漸進的に【一】【解説が多いですが、実はこのスレッドにはすでに含まれています.しかし、本人が接触したばかりの時には、やはり多くの収穫をもたらしてくれます.ここで備考してください.】