欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android WebView開發(fā)之WebView與Native交互

 更新時間:2021年12月16日 14:28:22   作者:紅日666  
隨著H5的廣泛使用,Android開發(fā)過程中免不了會使用網頁來做展示,那么web與native之間的通信就顯得尤其重要了,其實際上是JavaScript與java之間的通信。本文將為大家詳細介紹二者是如何實現交互的,需要的朋友可以參考一下

前言

附GitHub源碼:WebViewExplore

一、JS調用Native的三種方式

1、通過WebView的addJavascriptInterface進行對象映射

需要注意的是這種調用方式,如果你的 minSdkVersion <=16那么需要考慮到4.2之前的漏洞問題。

mWebView.addJavascriptInterface(new JsCallAndroidInterface(), "JSCallBackInterface");
    /**
     * JS調用android原生方法1:
     *
     * 通過WebView的addJavascriptInterface()進行對象映射
     */
    private class JsCallAndroidInterface {
 
        /**
         *@JavascriptInterface注解方法.
         * js端調用,4.2以后安全;4.2以前,當JS拿到Android這個對象后,
         * 就可以調用這個Android對象中所有的方法,包括系統類(java.lang.Runtime 類)
         * 從而進行任意代碼執(zhí)行。
         * @param msg
         */
        @JavascriptInterface
        public void callback(String msg) {
            ToastUtil.showToast(APIWebViewActivity.this, "JS方法回調到web了 :" + msg);
        }
    }

2、通過WebViewClient shouldOverrideUrlLoading方法回調攔截url:

與url重定向類似,可在此做url的攔截,已達到針對性的調用native方法的目的。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (resolveShouldLoadLogic(url)) {
        return true;
    }
    return super.shouldOverrideUrlLoading(view, url);
}
    /**
     * JS調用android原生方法2:
     *
     * 通過WebViewClient shouldOverrideUrlLoading方法回調攔截url
     *
     * 根據協議的參數,判斷是否是所需要的url:
     * 一般根據scheme(協議格式),authority(協議名)來判讀
     *
     * @param url
     * @return
     */
    private boolean resolveShouldLoadLogic(String url) {
        Uri uri = Uri.parse(url);
        if (uri.getScheme().equals("js")) {
            if (uri.getAuthority().equals("Authority")) {
                ToastUtil.showToast(APIWebViewActivity.this, "方法2");
            }
            return true;
        }
        return false;
    }

3、通過WebChromeClient的 onJsPrompt()等方法 ,回調攔截JS對話框prompt()等:

        /**
         * 是否支持頁面中的js輸入彈出框
         *
         * @param view
         * @param url
         * @param message
         * @param defaultValue
         * @param result
         * @return
         */
        @Override
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,
                                  JsPromptResult result) {
            if (resolveJSPrompt(message)) {
                return true;
            }
            return super.onJsPrompt(view, url, message, defaultValue, result);
        }
    /**
     * JS調用android原生方法3:
     *
     * 通過WebChromeClient的 onJsAlert() onJsConfirm() onJsPrompt() 方法
     * 回調攔截JS對話框alert() confirm() prompt()
     */
    private boolean resolveJSPrompt(String message) {
        Uri uri = Uri.parse(message);
        if (uri.getScheme().equals("js")) {
            if (uri.getAuthority().equals("Authority")) {
                ToastUtil.showToast(APIWebViewActivity.this, "方法3");
            }
            return true;
        }
        return false;
    }

完整源碼

Js調用Native示例源碼-JsToNativeBridgeActivity

二、Native調用WebView的兩種方案

1、loadUrl("javascript:callJS()"):

此方法簡潔、效率低。當不需要返回值且對性能要求較低時可以考慮使用:

/**
* Native調用JS方法一:
* 方法簡潔、效率低
* 當不需要獲取返回值且對性能要求較低時可選擇使用。
*/
webView.loadUrl("javascript:callJS()");

2、evaluateJavascript(script,resultCallback):

需4.4以上才可使用,效率高且有返回值:

/**
 * Native調用JS方法二:
 * 效率高,有返回值(4.4以上系統使用)
 */
webView.evaluateJavascript("javascript:callJS('yao')", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String value) {
        //此處為JS返回的結果
        Logger.d("value:" + value);
    }
});

完整源碼

Native調用JS示例源碼-NativeToJsBridgeActivity?

到此這篇關于Android WebView開發(fā)之WebView與Native交互的文章就介紹到這了,更多相關Android WebView與Native交互內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • ExpandableListView實現手風琴效果

    ExpandableListView實現手風琴效果

    這篇文章主要為大家詳細介紹了ExpandableListView實現手風琴效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android下拉刷新框架實現代碼實例

    Android下拉刷新框架實現代碼實例

    這篇文章主要介紹了Android下拉刷新框架實現代碼實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Android Flutter實現仿閑魚動畫效果

    Android Flutter實現仿閑魚動畫效果

    目前正在做的項目,為了增加用戶的體驗度,準備增加一些動畫效果。本文將通過Android Flutter實現仿閑魚動畫效果,感興趣的可以嘗試一下
    2023-02-02
  • 深入剖析Android的Volley庫中的圖片加載功能

    深入剖析Android的Volley庫中的圖片加載功能

    這篇文章主要介紹了Android的Volley框架中的圖片加載功能,從源碼剖析了Volley加載圖片時的請求隊列處理等方面,需要的朋友可以參考下
    2016-04-04
  • Android中使用背景色Alpha值遇到的一個坑

    Android中使用背景色Alpha值遇到的一個坑

    通過修改Alpha值可以對透明度進行設置,這個大家應該都不陌生,下面這篇文章主要給大家介紹了關于Android中使用背景色Alpha值遇到的一個坑,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • Android實現音樂播放器歌詞顯示效果

    Android實現音樂播放器歌詞顯示效果

    這篇文章主要為大家詳細介紹了Android實現音樂播放器歌詞顯示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • android判斷一個Activity是否處于棧頂的實例

    android判斷一個Activity是否處于棧頂的實例

    下面小編就為大家分享一篇android判斷一個Activity是否處于棧頂的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Android實戰(zhàn)打飛機游戲之怪物(敵機)類的實現(4)

    Android實戰(zhàn)打飛機游戲之怪物(敵機)類的實現(4)

    這篇文章主要為大家詳細介紹了Android實戰(zhàn)打飛機游戲之怪物(敵機)類的實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Flutter利用ORM框架簡化本地數據庫管理詳解

    Flutter利用ORM框架簡化本地數據庫管理詳解

    使用?sqflite?相對來說還是有點復雜,比如遇到數據不兼容的時候需要手動轉換,增加了不少繁瑣的代碼。本篇我們就來介紹一個?ORM?框架,來簡化數據庫的管理,感興趣的可以了解一下
    2023-04-04
  • 淺談Android解決65535問題的方法

    淺談Android解決65535問題的方法

    下面小編就為大家分享一篇淺談Android解決65535問題的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01

最新評論