以前在項目中遇到一個問題,就是在微信網頁上面原本是有返回按鈕的,可是大多數人都爲了方便,會使用安卓手機自帶的物理返回鍵,這個返回鍵按下後,就會按照你瀏覽器的棧存儲的路徑來一層一層返回,就不執行你頁面上的那個返回按鈕的操做了,可是這個物理返回鍵的監聽好像沒有直接的辦法進行,因此有人就想到了曲線的辦法javascript
原理:html
爲了方便調用,有人把這個邏輯稍微封裝了下,代碼見這裏(https://github.com/iazrael/xback)vue
使用方法:java
將此插件引進去後,使用方法:git
XBack.listen(function(){ alert('ah, press press press'); });
具體使用的時候,也有一些問題:github
由於這個是實現利用histroy.pushState寫入了一個指定狀態STATE,你點擊一次後,這個寫入的狀態就沒有了,若是你沒有後退頁面(還在當前頁面),上次那個監聽的操做執行完後,你還須要監聽這個物理返回鍵,這時候你就須要再上次那個操做完以後再使用histroy.pushState再寫入一次以前寫入的那個狀態,這樣下次會繼續監聽那個物理返回鍵,不然下次你再點擊那個返回鍵的話,就會直接返回瀏覽器的棧的上一級瀏覽器
舉個例子:微信
我在vue的項目中引入xback.jsthis
<remote-script src="/js/xback.js" @load="load_xback"></remote-script>
關於上面在vue中引入外部js,請參考 http://www.cnblogs.com/zhuchenglin/p/7455203.htmlspa
而後在vue中定義一個load_xback 方法
load_xback(){ var self = this XBack.listen(function(){
//這個是vux的確認彈出框 self.$vux.confirm.show({ title:'確認返回嗎?', content:'確認後,將返回', onConfirm () { //確認返回操做 }, onCancel(){ history.pushState('x-back', null, location.href); // XBack.record; } }) }); },
xback源碼:
;!function(pkg, undefined){ var STATE = 'x-back'; var element; var onPopState = function(event){ event.state === STATE && fire(); } var record = function(state){ history.pushState(state, null, location.href); } var fire = function(){ var event = document.createEvent('Events'); event.initEvent(STATE, false, false); element.dispatchEvent(event); } var listen = function(listener){ element.addEventListener(STATE, listener, false); } ;!function(){ element = document.createElement('span'); window.addEventListener('popstate', onPopState); this.listen = listen; this.record = record(STATE); record(STATE); }.call(window[pkg] = window[pkg] || {}); }('XBack');
這個方法目前只對支持h5瀏覽器有效
本文參考:http://blog.csdn.net/kongjiea/article/details/22850629
如需轉載此文,請在下面註明出處:http://www.cnblogs.com/zhuchenglin/p/7607768.html