Android webviewとjs(Vue)が相互作用します。
9416 ワード
jsと原生のインタラクションは二つのケースに分けられます。jsは原生メソッドを呼び出して、元のものはjsメソッドを呼び出します。
本論文では、これらの2つの状況をそれぞれ説明し、H 5端子は
一、前期準備(Vueプロジェクト準備)
本明細書のH 5端子は
プロジェクトが完了したら、
パソコンのブラウザにアクセスするなら、どれでもいいですが、携帯電話やシミュレータにアクセスするには第二のベルト
注意:ここで使うのはvue-cli 3.0で、運行コマンドはvue-cli 2.Xとは違います。詳細は自分で公式文書を調べてください。
起動成功後、Androidプロジェクトに
二、Android原生がJS中の方法を呼び出します。
AndroidがJSを呼び出すには、2つの方法があります。 二つの違い: です。 を取得することができる。 を使用することができます。
達成する効果:
下の図のように、ページには一行の文字があります。「ははは、
2.1 Vueコード
まずVueの中のコードを見て、どう書きますか?
詳細については、
まとめてみるとは、 を定義する。は、 。
2.2 Androidのコード
2.2.1
2.2.2
他のところは
三、JSはAndroidの原生方法を呼び出します。
JSに対してAndroidコードを呼び出す方法は3つあります。は、 を行う。は、 をリセットする。は、 をリセットする。
コントラスト:一番簡潔なのは一つ目ですが、Android 4.2以下には脆弱性があります。二つ目と三つ目の使用は複雑ですが、脆弱性はありません。
現在の設備システムのバージョンは基本的に4.2以上ですので、第一種類を使えばいいです。時間が限られていますので、第一種類と第二種類と第三種類だけは実現できません。知りたいのはこの文章を参考にしてもいいです。
3.1効果の展示
実現する効果はH 5ページのボタンをクリックして、Android原生の
3.2 Vueコード
3.3 Androidコード
新しいクラス
以上はAndroidとJSの呼び合いです。
本論文では、これらの2つの状況をそれぞれ説明し、H 5端子は
vue
で実現される。一、前期準備(Vueプロジェクト準備)
本明細書のH 5端子は
Vue
で実現されるので、正式開始前にまずVue
プロジェクト環境を準備する。プロジェクトが完了したら、
npm run serve
命令でプロジェクトをスタートさせ、成功したらコマンドラインで二つの住所を見ます。http://localhost:8080/
およびhttp://10.0.0.188:8080/
10.0.0.188
は私の本機のip
の住所です。人によって違います。パソコンのブラウザにアクセスするなら、どれでもいいですが、携帯電話やシミュレータにアクセスするには第二のベルト
ip
のアドレスが必要です。また、携帯電話とパソコンは同じwifi
または同じセグメントに接続してください。注意:ここで使うのはvue-cli 3.0で、運行コマンドはvue-cli 2.Xとは違います。詳細は自分で公式文書を調べてください。
起動成功後、Androidプロジェクトに
http://10.0.0.188:8080/
アドレスをWebView
に配置すればいいです。Intent intent = new Intent(getActivity(), ProgressWebviewActivity.class);
intent.putExtra("url", "http://10.0.0.188:8080/");
startActivity(intent);
これで、携帯電話でVue
プロジェクトにアクセスできます。二、Android原生がJS中の方法を呼び出します。
AndroidがJSを呼び出すには、2つの方法があります。
WebView
を通じての方法です。webview.loadUrl()
webview.evaluateJavascript()
loadUrl()
はページを更新し、evaluateJavascript()
はページを更新しないので、evaluateJavascript()
の効率が高いloadUrl()
は、jsの戻り値が得られず、evaluateJavascript()
は、戻り値evaluateJavascript()
は、Android 4.4の後に、達成する効果:
下の図のように、ページには一行の文字があります。「ははは、
WebView
ページでロードが完了したら、Android原生コードを通じてこの行の文字を変更します。」2.1 Vueコード
まずVueの中のコードを見て、どう書きますか?
mounted() {
// window
window.callJsFunction = this.callJsFunction
},
data() {
return {
msg: " "
}
},
methods: {
callJsFunction(str) {
this.msg = " " + str
return "js "
}
}
methods
においてAndroid起動のための方法callJsFunction(str)
を定義し、パラメータstr
を受信し、ページ内のテキストを変更することができる。methods
で方法を定義するだけでは、元の呼び出しはこの方法が見つからないので、ページをロードする際に方法をwindow
にマウントします。これでWebView
はこの方法を受け取ることができます。このステップは重要です。必ず書きます。詳細については、
this.callJsFunction
の後に括弧()
を入れないでください。括弧を入れるのは、直接呼び出しに相当します。まとめてみると
Vue
の中でやるべきことは二つのステップです。methods
において、方法mounted
において、方法をwindow
にマウントする2.2 Androidのコード
WebView
のonPageFinished
方法で起動ロジックを書き込む必要があります。そうでないと実行されません。2.2.1
loadUrl()
実装tbsWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url, headerMap);
return true;
}
@Override
public void onPageFinished(WebView webView, String s) {
super.onPageFinished(webView, s);
// js 。 onPageFinished
tbsWebView.post(new Runnable() {
@Override
public void run() {
tbsWebView.loadUrl("javascript:callJsFunction('soloname')");
}
});
}
});
}
});
パラメータを伝える必要がないなら、パラメータを外してもいいです。2.2.2
tbsWebView.loadUrl("javascript:callJsFunction()");
実装他のところは
evaluateJavascript()
と同じです。loadUrl()
だけを取り替えるだけです。@Override
public void onPageFinished(WebView webView, String s) {
super.onPageFinished(webView, s);
// js 。 onPageFinished
tbsWebView.post(new Runnable() {
@Override
public void run() {
tbsWebView.evaluateJavascript("javascript:callJsFunction('soloname')", new ValueCallback() {
@Override
public void onReceiveValue(String s) {
Logger.d("js : " + s);
}
});
}
});
}
ページが更新されているのが見えます。2番目の方法も結果を得ました。三、JSはAndroidの原生方法を呼び出します。
JSに対してAndroidコードを呼び出す方法は3つあります。
tbsWebView.loadUrl("javascript:callJsFunction('soloname')");
のWebView
を介してオブジェクトマッピングaddJavascriptInterface()
のWebViewClient
方法でブロックshouldOverrideUrlLoading()
のWebChromeClient
、onJsAlert()
、onJsConfirm()
を介して、JSダイアログonJsPrompt()
、alert()
、confirm()
、prompt()
、Toast
メッセージコントラスト:一番簡潔なのは一つ目ですが、Android 4.2以下には脆弱性があります。二つ目と三つ目の使用は複雑ですが、脆弱性はありません。
現在の設備システムのバージョンは基本的に4.2以上ですので、第一種類を使えばいいです。時間が限られていますので、第一種類と第二種類と第三種類だけは実現できません。知りたいのはこの文章を参考にしてもいいです。
3.1効果の展示
実現する効果はH 5ページのボタンをクリックして、Android原生の
methods
をポップアップすることです。3.2 Vueコード
methods: {
showAndroidToast() {
$App.showToast(" , js ")
}
}
showAndroidToast()
において、方法JsJavaBridge
を定義し、ページ上のボタン「Android原生Toastを起動する」をクリックしたときに呼び出します。3.3 Androidコード
新しいクラス
WebView
public class JsJavaBridge {
private Activity activity;
private WebView webView;
public JsJavaBridge(Activity activity, WebView webView) {
this.activity = activity;
this.webView = webView;
}
@JavascriptInterface
public void onFinishActivity() {
activity.finish();
}
@JavascriptInterface
public void showToast(String msg) {
ToastUtils.show(msg);
}
}
Android
により、JsJavaBridge
クラスとJSコードのマッピングを設定する。tbsWebView.addJavascriptInterface(new JsJavaBridge(this, tbsWebView), "$App");
ここで、クラス$App
をJSにマッピングすることにより、$App.showToast(" , js ")
を呼び出すことができる。以上はAndroidとJSの呼び合いです。