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

解決微信內(nèi)置瀏覽器返回上一頁(yè)強(qiáng)制刷新問(wèn)題方法

 更新時(shí)間:2017年02月05日 12:17:21   作者:likar  
微信內(nèi)置瀏覽器在返回上一頁(yè)面,且上一頁(yè)面包含AJAX代碼時(shí),頁(yè)面就會(huì)被強(qiáng)制刷新,極度影響用戶體驗(yàn)。而我們想要的效果是:返回上一頁(yè)面時(shí),頁(yè)面還停留在原來(lái)的狀態(tài),AJAX獲取到的數(shù)據(jù)還在,滾動(dòng)條也在原來(lái)的位置。下面跟著小編一起來(lái)看下吧

微信內(nèi)置瀏覽器在返回上一頁(yè)面,且上一頁(yè)面包含AJAX代碼時(shí),頁(yè)面就會(huì)被強(qiáng)制刷新,極度影響用戶體驗(yàn)。而我們想要的效果是:返回上一頁(yè)面時(shí),頁(yè)面還停留在原來(lái)的狀態(tài),AJAX獲取到的數(shù)據(jù)還在,滾動(dòng)條也在原來(lái)的位置。

BINGO~

通過(guò)HTML5history API + 緩存可以做到這一點(diǎn)。

執(zhí)行原理:

1.0、通過(guò)history API的 history.pushState或 history.replaceState 保存AJAX狀態(tài);

2.0、同時(shí)將AJAX獲取到的數(shù)據(jù)緩存起來(lái)(可以考慮使用H5的localStorage或sessionstorage);

3.0、當(dāng)返回到這個(gè)頁(yè)面時(shí),先獲取窗口的history.state,如果不為空,表示保存的有狀態(tài),我們要做的就是恢復(fù)到這個(gè)狀態(tài);

4.0、讀取緩存數(shù)據(jù)并加載。如果涉及到分頁(yè),且是滾動(dòng)加載的形式,需要將當(dāng)前頁(yè)設(shè)置為history.state中的頁(yè)數(shù)。

使用技術(shù)點(diǎn)介紹:

history API:

HTML5 history API只包括2個(gè)方法:history.pushState()history.replaceState(),以及1個(gè)事件:window.onpopstate

①history.pushState()

它的完全體是 history.pushState(stateObject, title, url),包括三個(gè)參數(shù)。

第1個(gè)參數(shù)是狀態(tài)對(duì)象,它可以理解為一個(gè)拿來(lái)存儲(chǔ)自定義數(shù)據(jù)的元素。它和同時(shí)作為參數(shù)的url會(huì)關(guān)聯(lián)在一起。

第2個(gè)參數(shù)是標(biāo)題,是一個(gè)字符串,目前各類瀏覽器都會(huì)忽略它(以后才有可能啟用,用作頁(yè)面標(biāo)題),所以設(shè)置成什么都沒(méi)關(guān)系。目前建議設(shè)置為空字符串。

第3個(gè)參數(shù)是URL地址,一般會(huì)是簡(jiǎn)單的?page=2這樣的參數(shù)風(fēng)格的相對(duì)路徑,它會(huì)自動(dòng)以當(dāng)前URL為基準(zhǔn)。需要注意的是,本參數(shù)URL需要和當(dāng)前頁(yè)面URL同源,否則會(huì)拋出錯(cuò)誤。

調(diào)用pushState()方法將新生成一條歷史記錄,方便用瀏覽器的“后退”和“前進(jìn)”來(lái)導(dǎo)航(“后退”可是相當(dāng)常用的按鈕)。另外,從URL的同源策略可以看出,HTML5 history API的出發(fā)點(diǎn)是很明確的,就是讓無(wú)跳轉(zhuǎn)的單站點(diǎn)也可以將它的各個(gè)狀態(tài)保存為瀏覽器的多條歷史記錄。當(dāng)通過(guò)歷史記錄重新加載站點(diǎn)時(shí),站點(diǎn)可以直接加載到對(duì)應(yīng)的狀態(tài)。

②history.replaceState()

它和history.pushState()方法基本相同,區(qū)別只有一點(diǎn),history.replaceState()不會(huì)新生成歷史記錄,而是將當(dāng)前歷史記錄替換掉。

③window.onpopstate

push的對(duì)立就是pop,可以猜到這個(gè)事件是在瀏覽器取出歷史記錄并加載時(shí)觸發(fā)的。但實(shí)際上,它的條件是比較苛刻的,幾乎只有點(diǎn)擊瀏覽器的“前進(jìn)”、“后退”這些導(dǎo)航按鈕,或者是由JavaScript調(diào)用的history.back()等導(dǎo)航方法,且切換前后的兩條歷史記錄都屬于同一個(gè)網(wǎng)頁(yè)文檔,才會(huì)觸發(fā)本事件。

上面的“同一個(gè)網(wǎng)頁(yè)文檔”請(qǐng)理解為JavaScript環(huán)境的document是同一個(gè),而不是指基礎(chǔ)URL(去掉各類參數(shù)的)相同。也就是說(shuō),只要有重新加載發(fā)生(無(wú)論是跳轉(zhuǎn)到一個(gè)新站點(diǎn)還是繼續(xù)在本站點(diǎn)),JavaScript全局環(huán)境發(fā)生了變化,popstate事件都不會(huì)觸發(fā)。

popstate事件是設(shè)計(jì)出來(lái)和前面的2個(gè)方法搭配使用的。一般只有在通過(guò)前面2個(gè)方法設(shè)置了同一站點(diǎn)的多條歷史記錄,并在其之間導(dǎo)航(前進(jìn)或后退)時(shí),才會(huì)觸發(fā)這個(gè)事件。同時(shí),前面2個(gè)方法所設(shè)置的狀態(tài)對(duì)象(第1個(gè)參數(shù)),也會(huì)在這個(gè)時(shí)候通過(guò)事件的event.state返還回來(lái)。

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)發(fā)微博功能的示例代碼

    微信小程序?qū)崿F(xiàn)發(fā)微博功能的示例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)發(fā)微博功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 詳解WordPress開(kāi)發(fā)中g(shù)et_current_screen()函數(shù)的使用

    詳解WordPress開(kāi)發(fā)中g(shù)et_current_screen()函數(shù)的使用

    這篇文章主要介紹了WordPress開(kāi)發(fā)中g(shù)et_current_screen()函數(shù)的使用,get_current_screen()通常在對(duì)象的實(shí)例化時(shí)使用,需要的朋友可以參考下
    2016-01-01
  • js中的new?Map的用法示例小結(jié)

    js中的new?Map的用法示例小結(jié)

    這篇文章主要介紹了js中的new?Map的用法示例小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • 防止動(dòng)態(tài)加載JavaScript引起的內(nèi)存泄漏問(wèn)題

    防止動(dòng)態(tài)加載JavaScript引起的內(nèi)存泄漏問(wèn)題

    利用Script標(biāo)簽可以跨域加載并運(yùn)行一段JavaScript腳本, 但Neil Fraser先前已指出,腳本運(yùn)行后資源并沒(méi)被釋放,即使是Script標(biāo)簽移除后。
    2009-10-10
  • 淺析js的模塊化編寫(xiě) require.js

    淺析js的模塊化編寫(xiě) require.js

    requirejs是一個(gè)JavaScript文件和模塊加載器。requireJS允許你把你的javascript代碼獨(dú)立成文件和模塊,同時(shí)管理每個(gè)模塊間的依賴關(guān)系。本文主要對(duì)require.js的使用與工作原理進(jìn)行系統(tǒng)介紹。需要的朋友來(lái)看下吧
    2016-12-12
  • 詳解JS如何進(jìn)行變量解構(gòu)

    詳解JS如何進(jìn)行變量解構(gòu)

    JavaScript中,可以使用解構(gòu)賦值的方式來(lái)對(duì)數(shù)組或者對(duì)象進(jìn)行變量解構(gòu),下面小編就來(lái)為大家詳細(xì)介紹一下JavaScript實(shí)現(xiàn)數(shù)組或者對(duì)象解構(gòu)的方法吧
    2023-11-11
  • 使用SVG基本操作API的實(shí)例講解

    使用SVG基本操作API的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇使用SVG基本操作API的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Javascript復(fù)制實(shí)例詳解

    Javascript復(fù)制實(shí)例詳解

    最近接了個(gè)項(xiàng)目,其中有項(xiàng)目需求是這樣的,需要復(fù)制內(nèi)容到剪切板,因?yàn)橛斜姸酁g覽器,所以兼容性很重要,下面通過(guò)本文給大家介紹Javascript復(fù)制實(shí)例詳解,對(duì)js復(fù)制相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • 關(guān)于恒等于(===)和非恒等于(!==)

    關(guān)于恒等于(===)和非恒等于(!==)

    關(guān)于恒等于(===)和非恒等于(!==)...
    2007-08-08
  • 詳解微信小程序開(kāi)發(fā)—你期待的分享功能來(lái)了,微信小程序序新增5大功能

    詳解微信小程序開(kāi)發(fā)—你期待的分享功能來(lái)了,微信小程序序新增5大功能

    微信小程序在12月21日發(fā)布了新版本的開(kāi)發(fā)工具,并在官網(wǎng)公布新增分享、模板消息、客服消息、掃一掃、帶參數(shù)二維碼功能。
    2016-12-12

最新評(píng)論

云龙县| 沂源县| 新余市| 屏东市| 酉阳| 高青县| 哈尔滨市| 麻江县| 麻江县| 社旗县| 太康县| 铁岭市| 新郑市| 尚义县| 云梦县| 大新县| 河曲县| 湘乡市| 新宾| 开封县| 青川县| 广灵县| 崇文区| 乐平市| 云阳县| 哈密市| 盘山县| 绥江县| 丰台区| 四川省| 漠河县| 五常市| 石屏县| 新泰市| 黄浦区| 日喀则市| 浦东新区| 花莲县| 明光市| 金山区| 东兴市|