アンドロイド(H5)メソッド呼び出し互いに

データ交換のために非常に重要な開発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

 

おすすめ

転載: www.cnblogs.com/Steffen-xuan/p/11272692.html