データ交換のために非常に重要な開発JavaとJS相互変調方式の前で記録を混合した場合。
この複合用途開発は、ウェブビューをコントロールする必要があります。
これは、ハッハッハ、形而上学であります
この記事ではhttps://www.jianshu.com/p/3d9a93c9fea2見ることができます
最初は、WebViewの程度を設定します。状態のWebViewを管理するように構成さWebSettings
パブリック 静的 ブールWebViewSetting(アクティビティ活動、WebViewのWebViewの){
最終 WebSettings WebSettings = webview.getSettings();
webSettings.setDomStorageEnabled(真の); // メイン文は、
(webSettings.setJavaScriptEnabled trueに); // JS有効
(webSettings.setBlockNetworkImageを偽の); // 画像を解決することは表示されません
webSettings.setSavePassword(偽の);
webSettings.setDefaultTextEncodingName( "UTF-8"); // 設定された符号化形式の
webSettings.getSettings()setBuiltInZoomControls();//は、スケーリングをサポートするか否かを設定
webSettings.addJavascriptInterface(OBJ、STRを); //は、HTMLページにJavaオブジェクトを注入
(webSettings.setUseWideViewPort 真の); // このプロパティを設定し、任意のスケーリングすることができる
(webSettings.setLoadWithOverviewMode trueに); // ページサポートズームは:
(webSettings.setJavaScriptEnabled trueに);
webSettings.setBuiltInZoomControls(真の);
webUrl.requestFocusFromTouch(); // ユーザーのWebViewが手動でユーザー名、パスワード、またはその他を入力する必要がある場合、あなたはジェスチャーが集中するのWebViewのサポートを設定する必要があります。
webSettings.setJavaScriptEnabled(真の); // サポートJS
webSettings.setUseWideViewPort(偽); //は、WebViewのに合わせて画像サイズを調整します
(webSettings.setSupportZoomをtrueに); // サポートスケーリングwebSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); // サポートコンテンツの再レイアウト
webSettings.supportMultipleWindows(); / / マルチウィンドウ
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 近くのWebViewキャッシュ
(webSettings.setAllowFileAccess 真の); // セットがファイルにアクセスすることができます
(webSettings.setNeedInitialFocus trueにする); // のWebView WebViewがノードを設定するのrequestFocusを呼び出すとき
webSettings.setJavaScriptCanOpenWindowsAutomatically(真の); // サポートはJSで新しいウィンドウを開く
(webSettings.setLoadWithOverviewMode trueに); // 画面のサイズに合わせてスケーリング
webSettings.setLoadsImagesAutomatically(真の); // 支持荷重の画像を自動的
// JavaScriptが自動的に開いているウィンドウすることができます許可JSの設定はポップ許可
webSettings.setJavaScriptCanOpenWindowsAutomatically(trueにする);
// キャッシュ設定
webSettings.setAppCacheEnabled(偽の);
// キャッシュモードを設定し、4つのモードの合計
//を webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// キャッシュパスの設定
webSettings.setAppCachePath(「」);
// (現在の画面に合わせて)サポートスケーリング
webSettings.setSupportZoom(真の);
//は、適切なサイズのに画像を調整します
webSettingsを(.setUseWideViewPort trueに);
// サポートコンテンツの再配置、4通りの合計
// デフォルトはNARROW_COLUMNS
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
// デフォルトのフォントサイズ設定
webSettings.setDefaultFontSize(12 );
// サポートズーム
(webSettings.setSupportZoom falseに);
// 設定された2つのサポートがズームジェスチャの意味
(webSettings.setBuiltInZoomControlsをfalseに)
戻る trueに;
}
ここでは、次のような重要な
addJavascriptInterfaceネイティブWebKitのAPIは、あるJSにJavaオブジェクトを露出させるため、jsのような方法は、直接呼び出すことができ、パブリックメソッドのWebViewのオブジェクトに属します。
それは安全ではありませんので、4.2追加@JavascriptInterfaceのコメントの後
フレームワークがあります。https://github.com/lzyzsd/JsBridge --- JavaとJavaScriptとの間のこのプロジェクトでは、ギャップを埋めます。
今すぐページwebview.loadUrl(「https://www.baidu.com/」)をロードを開始します。
@SuppressLint("JavascriptInterface")
private void initMixedPage() {
//封装webview
NativeWebViewUtil nativeWebViewUtil = new NativeWebViewUtil();
nativeWebViewUtil.WebViewSetting(this,webview);
//添加Javascript的映射
webview.addJavascriptInterface(this,"android");
webview.loadUrl("https://www.baidu.com");
webview.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 加载页面
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 加载结束
webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.v("Native",value);
}
});
}
});
}
没有回掉可以写null.
第一、Android调用js
有两个很重要的方法setWebChromeClient和setWebClient
setWebChromeClient主要处理解析,渲染网页等浏览器做的事情
WebChromeClient是辅助WebView处理Javascript的对话框等
要调用js就要等webview加载完成后再调用js方法
webview.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 加载页面
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 加载结束js 方法 get_android_base
webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.v("Native",value);
}
});
}
});
javascript代码
接收android发来的数据
function get_android_base(base){
alert(base);
}
第二、js调用Android
javascrip代码
js的一个方法 get_data()
window.android.get_data("mcontrol");
Android代码
@JavascriptInterface
public void get_data(String base){
Log.d(TAG,base);
}
到这里,简单的互调就完成了。
互调就很玄学,总是有各种各样的问题哈哈哈。
后面再记录下腾讯的webview