最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript調(diào)用Android接口常見(jiàn)的3種方式

 更新時(shí)間:2025年05月28日 10:27:58   作者:遙不可及zzz  
這篇文章主要介紹了JavaScript調(diào)用Android接口常見(jiàn)的3種方式,分別是通過(guò)addJavascriptInterface注入Java對(duì)象、攔截WebChromeClient實(shí)現(xiàn)雙向通信、攔截URLScheme支持單向調(diào)用,需要的朋友可以參考下

前言

在 Android 開(kāi)發(fā)中,JavaScript(JS)調(diào)用原生 Android 接口主要通過(guò) WebView 組件實(shí)現(xiàn)。以下是常見(jiàn)的 3 種核心方式及具體實(shí)現(xiàn)邏輯:

1. addJavascriptInterface 注入接口??

??原理??:通過(guò) WebView 向 JS 暴露一個(gè) Java 對(duì)象,JS 可直接調(diào)用該對(duì)象中被 @JavascriptInterface 注解標(biāo)記的方法

??步驟??:

  • ??定義接口類(lèi)??:
    public class WebAppInterface {
        Context mContext;
        WebAppInterface(Context c) { mContext = c; }
    
        @JavascriptInterface
        public void showToast(String msg) {
            Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
        }
    }
  • ??注入接口到 WebView??:
    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new WebAppInterface(this), "AndroidBridge");
  • ??JS 調(diào)用??:
    window.AndroidBridge.showToast("Hello from JS!");

??注意事項(xiàng)??:

  • ??安全風(fēng)險(xiǎn)??:若未使用 @JavascriptInterface 注解,可能導(dǎo)致任意方法被調(diào)用(如系統(tǒng)敏感 API)
  • ??API 版本??:需最低支持 API 17(Android 4.2)

??2. 攔截 WebChromeClient 對(duì)話框??

??原理??:通過(guò)重寫(xiě) WebChromeClient 的對(duì)話框回調(diào)方法(如 onJsPrompt),解析 JS 發(fā)送的指令

??步驟??:

  • ??自定義 WebChromeClient??:
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
            if (message.startsWith("native:")) { // 協(xié)議約定
                handleNativeCall(message); // 解析并執(zhí)行原生邏輯
                result.confirm("success"); // 返回結(jié)果給 JS
                return true;
            }
            return super.onJsPrompt(view, url, message, defaultValue, result);
        }
    });
  • ??JS 調(diào)用??:
    prompt("native:showToast", "{'msg':'Hello'}"); // 通過(guò) prompt 發(fā)送指令

??適用場(chǎng)景??:

  • 需要雙向通信(JS 可獲取原生返回值);
  • 兼容低版本 Android(無(wú)需依賴 @JavascriptInterface

??3. 攔截 URL Scheme??

??原理??:JS 觸發(fā)特定格式的 URL 請(qǐng)求(如 myapp://action?params),Android 通過(guò) shouldOverrideUrlLoading 攔截并處理

??步驟??:

  • ??自定義 WebViewClient??:
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("myapp://")) { // 協(xié)議約定
                parseUrl(url); // 解析 URL 并執(zhí)行對(duì)應(yīng)邏輯
                return true; // 阻止默認(rèn)加載
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
    });
  • ??JS 調(diào)用??:
    window.location.href = "myapp://showToast?msg=Hello"; // 或通過(guò) iframe 觸發(fā)

??優(yōu)缺點(diǎn)??:

  • ??優(yōu)點(diǎn)??:兼容性最好(支持所有 Android 版本);
  • ??缺點(diǎn)??:僅支持單向調(diào)用(JS 無(wú)法直接獲取原生返回值)

??安全建議??

  • ??輸入校驗(yàn)??:對(duì) JS 傳遞的參數(shù)進(jìn)行嚴(yán)格校驗(yàn),防止注入攻擊
  • ??最小權(quán)限原則??:僅暴露必要的接口方法,避免敏感操作(如文件讀寫(xiě))
  • ??HTTPS 加密??:加載遠(yuǎn)程頁(yè)面時(shí)使用 HTTPS,避免中間人攻擊

總結(jié) 

到此這篇關(guān)于JavaScript調(diào)用Android接口常見(jiàn)的3種方式的文章就介紹到這了,更多相關(guān)JS調(diào)用Android接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android切換卡TabWidget用法示例

    Android切換卡TabWidget用法示例

    這篇文章主要介紹了Android切換卡TabWidget用法,結(jié)合實(shí)例形式分析了TabWidget選項(xiàng)卡界面布局及功能實(shí)現(xiàn)的操作技巧,需要的朋友可以參考下
    2016-08-08
  • Android判斷當(dāng)前應(yīng)用程序處于前臺(tái)還是后臺(tái)的兩種方法

    Android判斷當(dāng)前應(yīng)用程序處于前臺(tái)還是后臺(tái)的兩種方法

    這篇文章主要介紹了Android判斷當(dāng)前應(yīng)用程序處于前臺(tái)還是后臺(tái)的兩種方法,有需要的朋友可以參考一下
    2013-12-12
  • Android自定義Animation實(shí)現(xiàn)View搖擺效果

    Android自定義Animation實(shí)現(xiàn)View搖擺效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義Animation實(shí)現(xiàn)View搖擺效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 解決Android MediaRecorder錄制視頻過(guò)短問(wèn)題

    解決Android MediaRecorder錄制視頻過(guò)短問(wèn)題

    本文主要介紹Android MediaRecorder,在使用MediaRecorder時(shí)經(jīng)常會(huì)遇到視頻錄制太短問(wèn)題,這里提供解決問(wèn)題的實(shí)例代碼以供大家參考
    2016-07-07
  • 最新評(píng)論

    睢宁县| 梅河口市| 岑溪市| 榆社县| 六枝特区| 于都县| 曲沃县| 开平市| 成都市| 祁东县| 德阳市| 盐山县| 济阳县| 黑山县| 宁乡县| 阿荣旗| 温州市| 海口市| 左权县| 仲巴县| 惠水县| 曲靖市| 永嘉县| 金阳县| 葵青区| 正镶白旗| 海晏县| 临邑县| 苍南县| 新营市| 恩施市| 盐津县| 黎川县| 平阴县| 牡丹江市| 泸定县| 寿宁县| 奈曼旗| 南华县| 靖西县| 工布江达县|