H5 ページとネイティブ インタラクションのメソッドの 1 つ、addJavascriptInterface

H5 ページとネイティブ インタラクションの 2 つ目の方法、JsBridge

前に書いた

js と Java の間の相互作用は、これら 2 つのメソッドにすぎません。1
つ目は、システムによって提供される webview.addJavascriptInterface であり、
2 つ目は、WebViewClient.shouldOverrideUrlLoading です。

addJavascriptInterface には、特に 4.2、4.2 以降 (API >= 17) で @JavascriptInterface アノテーションを追加してセキュリティ レベル、アノテーションのないメソッドを追加する前に、大きなセキュリティ リスク (js を介して高い権限を取得する、ユーザー情報を盗む、ウイルス コードを実行するなど) があります。 、js を呼び出すことはできず、コールバック メソッド webview.evaluateJavascript(s, valuecallback) がバージョン 4.4 で追加されましたが、より安全なやり取りの方法がまだあります。

それは、WebViewClient.shouldOverrideUrlLoading メソッドで URL をインターセプトし、そこに通信データを動的に埋め込むことです.
世界最大の同性愛者向け出会い系サイトである github のマスターhi は、一連の js とネイティブ セキュリティ対話フレームワークJsBridgeを作成しました。
addJavascriptInterfaceを使ったインタラクティブな実装方法についてお話しましょう

addJavascriptInterfaceの使い方

通常、js と対話するコードを管理するために、NativeJsBridge クラスを個別に作成します。
addJavascriptInterface を呼び出して有効にする

NativeJsBridge nativeJsBridge = new NativeJsBridge(webView, this);
webView.addJavascriptInterface(nativeJsBridge, "android");

android は js がネイティブを呼び出すときのエイリアスであり、修正されていません。
1. Java は js
js を呼び出して、呼び出されたメソッドを作成します

function setICCID(iccid){
        document.getElementById("ICCID").innerHTML = iccid;
}

Java がこのメソッドを呼び出します

webView.loadUrl("javascript:setICCID('" + No:007 + "')")

2. js は java
java を呼び出して、呼び出されたメソッドを作成します。

    @JavascriptInterface
    public void writeCard(final String indata) {
        mActivity.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                boolean result = writeCard(indata,imei);
                //把写卡结果返回给js
                String writeResult = "javascript:showWriteResult('" + result + "')";
                mWebView.loadUrl(writeResult);
            }
        });
    }

jsはパラメーターを指定してJavaメソッドを呼び出します

function writeCard(){
    var x1 = document.getElementById("writeData").innerText;
    //js调用Java函数并传入参数
    javascript:android.writeCard(x1);
}
function showWriteResult(result){
    document.getElementById("writeResult").innerHTML = result;
}

3. バージョン 4.4 以降、戻り値
js で js メソッドを呼び出す 呼び出されたメソッドを定義し、処理結果を返す

function sum2Java(number1, number2) {
    return number1 + number2;
}

Java は戻り値で js メソッドを呼び出します

    @TargetApi(Build.VERSION_CODES.KITKAT)
    @JavascriptInterface
    public void Android2JsHaveParmHaveResult2() {
        mActivity.runOnUiThread(new Runnable() {

            @Override
            public void run() {

                mWebView.evaluateJavascript("sum2Java(3,4)", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String Str) {
                        Toast.makeText(mActivity, "我是android调用js方法(4.4后),入参是3和4,js返回结果是" + Str, Toast.LENGTH_LONG).show();
                    }
                });
            }
        });
    }

 

おすすめ

転載: blog.csdn.net/juruiyuan111/article/details/126936254