1. 程式人生 > >混合開發中,H5頁面如何監聽Android手機返回鍵

混合開發中,H5頁面如何監聽Android手機返回鍵

1. 前言

混合開發中,如果當前操作的頁面是H5寫的。那麼這個時候點選Android手機返回鍵,預設是返回到上一個頁面,跟瀏覽器的回退功能是一樣的,都是返回到歷史記錄中的前一個記錄。看著好像沒啥問題,但是當H5頁面當前有一個彈窗,按照正常的互動,這會兒點選手機返回鍵,應該是關閉彈窗的,但是實際上卻不是這樣子,不僅僅關閉了彈窗,而且返回到了上一個頁面。那我們該如何處理這種情況呢?

2. 解決方案

不是很複雜,就是讓Android原生重寫方法onKeyDown(),並且H5頁面增加一個JS方法phoneBackButtonListener()。當點選了手機返回鍵,onKeyDown()就會被呼叫,同時也讓Android原生主動呼叫H5頁面的phoneBackButtonListener()。具體程式碼如下:

Android:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (mWebView != null) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            mWebView.evaluateJavascript("javascript:phoneBackButtonListener()", new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String value) {
                    // value的值為"true"時,H5頁面遮蔽手機返回鍵
                    // value的值為"false"或"null"時,H5頁面不遮蔽手機返回鍵
                    // phoneBackButtonListener()未定義或沒有返回任何資料,則value的值為"null"
                    if ("false".equals(value) || "null".equals(value)) {
                        // 執行原生的處理邏輯
                    }
                }
            });
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

H5:

// 監聽手機的返回鍵,如果H5頁面要遮蔽,則返回true;如果不遮蔽,則返回false
function phoneBackButtonListener() {
    // 執行H5的處理邏輯
    return true;
}

相關推薦

H5頁面Android物理返回

Android物理返回鍵的點選事件,一般webview的預設行為是 window.history.go(-1) ,但是在實際需求場景下,簡單的頁面回退並不能滿足需求,所以需要H5頁面監聽Android物理返回鍵從而自定義處理方法。 本方案的程式碼都在 h5_android_back 倉庫中 原理 主要是

混合開發H5頁面如何Android手機返回

1. 前言 混合開發中,如果當前操作的頁面是H5寫的。那麼這個時候點選Android手機返回鍵,預設是返回到上一個頁面,跟瀏覽器的回退功能是一樣的,都是返回到歷史記錄中的前一個記錄。看著好像沒啥問題,但是當H5頁面當前有一個彈窗,按照正常的互動,這會兒點選手機返回鍵,應該是

react-native Android物理返回

1、componentWillMount(){ BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid)

React和Vue是如何變數變化的

React 中 本地除錯React程式碼的方法 先將React程式碼下載到本地,進入專案資料夾後yarn build 利用create-react-app建立一個自己的專案 把react原始碼和自己剛剛建立的專案關聯起來,之前build原始碼到build資料夾下面,然後cd到react資料夾

微信小程式開發textarea文字域字數限制與動態計算

微信小程式開發時常會有評論或者備註功能,都會用到文字域字元長度計算以及字元限制的功能,筆者把最簡潔易用的案例分享出來。學習之前先看微信官方API文件 https://mp.weixin.qq.com/debug/wxadoc/dev/component/textarea.html

vue+hbuilder安卓返回問題

1.監聽安卓返回鍵問題 效果:在一級頁面按一下返回鍵提示退出應用,按兩下退出應用;在其它頁面中,按一下返回上個歷史頁面 1 2

如何Android手機物理返回

概述 window.onpopstate是popstate事件在window物件上的事件控制代碼. 每當處於啟用狀態的歷史記錄條目發生變化時,popstate事件就會在對應window物件上觸發. 如果當前處於啟用狀態的歷史記錄條目是由history.pushSta

安卓返回

window.addEventListener("popstate", function(e) { alert("安卓的返回鍵"); }, false);這個監聽安卓返回需要一個js點選開啟連結

原生webview使用沈浸狀態欄H5頁面適配iphoneX頂部

screen log kit media ati col 頂部 否則 適配 @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-

WEB移動端開發區域網內手機瀏覽器訪問電腦頁面實時檢視程式碼除錯結果

痛點:在進行移動端頁面開發時,經常需要用手機檢視開發的頁面效果。雖然瀏覽器自帶模擬器,但是各個手機相容問題除錯以及操作效果除錯還是需要上真機。 解決途徑: 1、將程式碼扔到伺服器,通過連線伺服器訪問頁面除錯 2、採用內網穿透,將自己的電腦當成伺服器主機,手機訪問電腦伺服器。之前我用過NA

app h5頁面的時候怎麼去定位元素?

測試app的時候,我們知道可以通過UI Automator Viewer進行元素定位 但是很多app中都會內嵌h5頁面,這個時候定位就會變成下圖這樣: 第一步: 在手機中開啟當前app的h5介面

在前端開發頁面渲染指什麼

從上面這個圖中,我們可以看到那麼幾個事: 1)瀏覽器會解析三個東西: 一個是HTML/SVG/XHTML,事實上,Webkit有三個C++的類對應這三類文件。解析這三種檔案會產生一個DOM Tree。 CSS,解析CSS會產生CSS規則樹。 Javascript,指令碼,主

jsPC/手機/微信瀏覽器後退按鈕事件可跳轉到指定頁面

$(document).ready(function (e) { var counter = 0; if (window.history && window.history.pushState) {

vue之在頁面鍵盤的Enter來觸發某個按鈕事件

專案中得需求:給頁面某個按鈕繫結Enter鍵,但是按鈕不在form中,直接給按鈕繫結後此按鈕只有獲取了焦點按鍵才會觸發,顯然,一直保持按鈕獲取焦點是不現實得。所以通過查詢等,結合專案需求,完成了下面得程式碼,希望對大家有用,歡迎一起探討,Email:[email p

vue使用element-ui鍵盤事件input只能輸入純數字

1.element-ui的input監聽事件   vue中element-ui在使用el-input的時候,由於el-input在輸入框的外層添加了一層的<div class="el-input"></div>,把input隱藏在子級,所以el-input新增上

SSH專案開發將jsp頁面放在WEB-INF的原因解析

在一些安全型要求比較高的專案開發中,我們經常看到jsp頁面都被放在WEB-INF下面了。這是出於對安全性的考慮,是為了程式碼的安全。這樣實現起來雖然麻煩了點,而且頁面跳轉很不方便。但是整個專案的安全

js跨頁面觸發事件利用storage事件

最近做的一個專案遇到的這個問題,首頁是一個列表頁,列表上有一些操作需要新開一個標籤頁展示,在新開頁面儲存之後要重新整理之前的列表頁,也就是跨頁面觸發重新整理列表。 我的解決方案是利用storage監聽

混合開發遇到的上拉重新整理下拉載入的問題

上拉載入遇到的問題:        iscroll: 可以實現上下拉重新整理,載入,效果比較差,可是在頁面上只能上下滑動,不能左右滑動,如果你的頁面嵌入到客戶端的tab底下,就會阻止客戶端的左右滑動                    如果想要實現左右切換,就得把isc

ListView嵌入button點選無響應的解決方案

    開發中很常見的一個問題,專案中的listview不僅僅是簡單的文字,常常需要自己定義listview,自己的Adapter去繼承BaseAdapter,在adapter中按照需求進行編寫,問題就出現了,可能會發生點選每一個item的時候沒有反應,無法獲取的焦點。原因多半是由於在你自己定義的Item中

JAVA開發頁面post提交的資料後臺通過request取出時是空的所有引數都消失了

這兩天調查一個問題,一個特定的製造編號檢索出623條資料,並顯示在頁面上。然後再把資料提交時,後臺報空指標,除錯後發現request中是空的,所有引數都消失了!換其它的製造編號就不會出現這個問題,開始以為是資料不同,走了不同分支,多次檢查資料和程式碼後並沒有發現問題。頁面程