and roid webViewは原生と対話する。
7150 ワード
本文
すべてはプロジェクトWebView Studyに基づいて説明しています。最小のユニットのケースです。参考研究として、いくつかの方面から説明しています。 1、JavaはWebView内のjsコード(伝達パラメータ) を呼び出します。、WebView内のjsコードはJavaローカル方法(伝達パラメータ) を呼び出す。、外部注入jsコード 、WebView長押しイベント 関連JSコード:
//JavaScriptを有効にするとWebViewに伝えます。デフォルトはfalseです。ws.set Java Script Empled(true)1、呼び出しをクリックしたらそのまま実行すればいいです。
ここにはjsのクリック方法があります。
時々私たちはウェブページを入手します。このページは私たちが注文したものではなく、中には私たちが呼び出したjsコードがありません。この時にはフロントエンドで直接jsに注入できます。例えば、ウェブページの中に写真があります。写真をクリックして、写真を見たいです。そして、写真を現地に保存したいです。この時、ホームページはこのjs方法を実現していません。しかし、jsコードを注入して、この需要を実現します。
ロードが完了したら、このjsを呼び出します。
WebView長押しイベント
著者:Jinbeenリンク:https://www.jianshu.com/p/97f52819a19d 出所:略書の著作権は作者の所有になります。商業転載は作者に連絡して授権を獲得してください。商業転載ではないので、出典を明記してください。
すべてはプロジェクトWebView Studyに基づいて説明しています。最小のユニットのケースです。参考研究として、いくつかの方面から説明しています。
js android
function javacalljs(){
document.getElementById("content").innerHTML +=
"<br\>java js , ";
}
<!-- android -->
function javacalljswithargs(data){
document.getElementById("content").innerHTML +=
("<br\>"+data);
}
javaコードを び すにはクリックしてください。
javaコードを び してパラメータを えるにはクリックしてください。
JavaはWebView内のjsコードを呼び出します。(パラメータを伝える)//JavaScriptを有効にするとWebViewに伝えます。デフォルトはfalseです。ws.set Java Script Empled(true)1、呼び出しをクリックしたらそのまま実行すればいいです。
//
webView.loadUrl("javascript:javacalljs()");
//
webView.loadUrl("javascript:javacalljswithargs('" + "android , " + "')");
2、表示後に呼び出したら、html表示が完了したらMyWebView Cient.javaに置くように注意してください。@Override
public void onPageFinished(WebView view, String url) {
//
webView.loadUrl("javascript:javacalljs()");
//
webView.loadUrl("javascript:javacalljswithargs('" + "android , " + "')");
super.onPageFinished(view, url);
}
/**
* 4.4 evaluateJavascript
*/
private void load(String jsCode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
evaluateJavascript(jsCode, null);
} else {
loadUrl(jsCode);
}
}
WebViewの中のjsコードはJavaローカルメソッドを呼び出します。ここにはjsのクリック方法があります。
javaコードを び すにはクリックしてください。
javaコードを び してパラメータを えるにはクリックしてください。
jsとのインタフェースを実現する:webView.addJavascriptInterface(new MyJavascriptInterface(this), "injectedObject");
ここの「injectedObject」はjsの「window.inject edbject.startFunction」に対応しています。この中でMyJavascript Interface.java:/**
* Created by jingbin on 2016/11/17.
* js
*/
public class MyJavascriptInterface {
private Context context;
public MyJavascriptInterface(Context context) {
this.context = context;
}
/**
* js:
* imageClick js
*
* @param src
*/
@JavascriptInterface
public void imageClick(String src) {
Log.e("imageClick", "---- ");
Log.e("src", src);
}
/**
* js
*
*
* @param type type
* @param item_pk item_pk
*/
@JavascriptInterface
public void textClick(String type, String item_pk) {
if (!TextUtils.isEmpty(type) && !TextUtils.isEmpty(item_pk)) {
Log.e("textClick", "---- ");
Log.e("type", type);
Log.e("item_pk", item_pk);
}
}
/**
* js,
*/
@JavascriptInterface
public void startFunction() {
Log.e("startFunction", "---- ");
}
/**
* js, , data
*
* @param data js
*/
@JavascriptInterface
public void startFunction(String data) {
Log.e("startFunction", "---- " + data);
}
}
そして対標の中の二つの方法: /**
* js,
*/
@JavascriptInterface
public void startFunction() {
Log.e("startFunction", "---- ");
}
/**
* js, , data
*
* @param data js
*/
@JavascriptInterface
public void startFunction(String data) {
Log.e("startFunction", "---- " + data);
}
外部注入jsコード時々私たちはウェブページを入手します。このページは私たちが注文したものではなく、中には私たちが呼び出したjsコードがありません。この時にはフロントエンドで直接jsに注入できます。例えば、ウェブページの中に写真があります。写真をクリックして、写真を見たいです。そして、写真を現地に保存したいです。この時、ホームページはこのjs方法を実現していません。しかし、jsコードを注入して、この需要を実現します。
ロードが完了したら、このjsを呼び出します。
// js , img , onclick , java url
webView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\");" +
"for(var i=0;i
この時にMyJavascript Interface.javaのイメージClick方法を見ます。 /**
* js:
* imageClick js
*
* @param src
*/
@JavascriptInterface
public void imageClick(String src) {
Log.e("imageClick", "---- ");
Log.e("src", src);
}
srcは写真リンクとして表示・ダウンロード用として利用できます。WebView長押しイベント
webView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
final WebView.HitTestResult hitTestResult = webView.getHitTestResult();
//
if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
//
new AlertDialog.Builder(WebViewActivity.this)
.setItems(new String[]{" ", " "}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String picUrl = hitTestResult.getExtra();
//
Log.e("picUrl", picUrl);
switch (which) {
case 0:
break;
case 1:
break;
default:
break;
}
}
})
.show();
return true;
}
return false;
}
});
参考資料著者:Jinbeenリンク:https://www.jianshu.com/p/97f52819a19d 出所:略書の著作権は作者の所有になります。商業転載は作者に連絡して授権を獲得してください。商業転載ではないので、出典を明記してください。