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

移動(dòng)端H5頁(yè)面返回并刷新頁(yè)面(BFcache)的方法

 更新時(shí)間:2018年11月06日 10:24:45   作者:雨吻蝶  
這篇文章主要給大家介紹了關(guān)于移動(dòng)端H5頁(yè)面返回并刷新頁(yè)面(BFcache)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目中的需求:

點(diǎn)擊瀏覽器中的返回按鈕,要讓頁(yè)面重新加載資源。因?yàn)檫@部分的資源每次去加載的內(nèi)容都不一樣,如果返回的時(shí)候,還是看到原先的內(nèi)容,那做這個(gè)內(nèi)容塊的意義就很小了;而如果用戶看完了這部分內(nèi)容,再返回來(lái)的時(shí)候,這個(gè)地方換成了新的內(nèi)容,這樣就能體現(xiàn)這部分的價(jià)值了。

而對(duì)于瀏覽器來(lái)說,大部分瀏覽器的返回是直接使用緩存的,不會(huì)執(zhí)行任何的javascript代碼。原因:部分瀏覽器在后退時(shí)不會(huì)觸發(fā)onload事件,這是HTML5世代瀏覽器新增的特性之一——Back-Forward Cache(簡(jiǎn)稱bfcache)

什么是bfcache?

bfcache,即back-forward cache,可稱為“往返緩存”,可以在用戶使用瀏覽器的“后退”和“前進(jìn)”按鈕時(shí)加快頁(yè)面的轉(zhuǎn)換速度。這個(gè)緩存不僅保存頁(yè)面數(shù)據(jù),還保存了DOM和JS的狀態(tài),實(shí)際上是將整個(gè)頁(yè)面都保存在內(nèi)存里。如果頁(yè)面位于bfcache中,那么再次打開該頁(yè)面就不會(huì)觸發(fā)onload事件

pageshow事件

這個(gè)事件在用戶瀏覽網(wǎng)頁(yè)時(shí)觸發(fā),pageshow 事件類似于 onload 事件,onload 事件在頁(yè)面第一次加載時(shí)觸發(fā), pageshow 事件在每次加載頁(yè)面時(shí)觸發(fā),即 onload 事件在頁(yè)面從瀏覽器緩存中讀取時(shí)不觸發(fā)。

pagehide事件

該事件會(huì)在用戶離開網(wǎng)頁(yè)時(shí)觸發(fā)。離開網(wǎng)頁(yè)有多種方式。如點(diǎn)擊一個(gè)鏈接,刷新頁(yè)面,提交表單,關(guān)閉瀏覽器等。pagehide 事件有時(shí)可以替代 unload事件,但 unload 事件觸發(fā)后無(wú)法緩存頁(yè)面。

persisted屬性

pageshow事件和pagehide事件的event對(duì)象還包含一個(gè)名為persisted的布爾值屬性。

  對(duì)于pageshow事件,如果頁(yè)面是從bfcache中加載的,則這個(gè)屬性的值為true;否則,這個(gè)屬性的值為false。

  對(duì)于pagehide事件,如果頁(yè)面在卸載之后被保存在bfcache中,則這個(gè)屬性的值為true;否則,這個(gè)屬性的值為false。

不同的瀏覽器在對(duì)當(dāng)前窗口‘打開'歷史記錄中的前一個(gè)頁(yè)面的表現(xiàn)上并不統(tǒng)一,這和瀏覽器的實(shí)現(xiàn)以及頁(yè)面本身的設(shè)置有關(guān)系。

解決方案:

javascript監(jiān)聽pageshow事件阻止頁(yè)面進(jìn)入bfcache

window.addEventListener('pageshow', function (e) {
if (e.persisted) {
window.location.reload()
}
})

在uc和微信中測(cè)試通過,但是在某些安卓手機(jī)自帶的瀏覽器中無(wú)效。

javascript監(jiān)聽pagehide事件阻止頁(yè)面進(jìn)入bfcache

window.addEventListener('pagehide', function (e) {
 var dom = document.body;
 dom.children.remove();
 setTimeout(function () {
  dom.appendChild("<script type='text/javascript'>window.location.reload();<\/script>");
 });
});

設(shè)置meta標(biāo)簽,清除頁(yè)面緩存

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Cache-Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control并不會(huì)修改另一個(gè)消息處理過程中的緩存處理過程。請(qǐng)求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各個(gè)消息中的指令含義如下

  • Public指示響應(yīng)可被任何緩存區(qū)緩存
  • Private指示對(duì)于單個(gè)用戶的整個(gè)或部分響應(yīng)消息,不能被共享緩存處理。這允許服務(wù)器僅僅描述當(dāng)用戶的部分響應(yīng)消息,此響應(yīng)消息對(duì)于其他用戶的請(qǐng)求無(wú)效
  • no-cache指示請(qǐng)求或響應(yīng)消息不能緩存
  • no-store用于防止重要的信息被無(wú)意的發(fā)布。在請(qǐng)求消息中發(fā)送將使得請(qǐng)求和響應(yīng)消息都不使用緩存。
  • max-age指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)
  • min-fresh指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)
  • max-stale指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

注:有些情況下設(shè)置清除緩存也沒有起到作用,我自己做的這個(gè)h5頁(yè)面就沒有起到效果。具體情況還是要具體分析。

我遇到的情況:

<div class="content">
<iframe id="iframe" src="https://cpu.baidu.com/xx/xx/xxx" frameborder="no" scrolling="no"></iframe>
</div>

這個(gè)iframe中的地址每次刷新頁(yè)面都會(huì)有不同的內(nèi)容推送給用戶。進(jìn)入iframe中的內(nèi)容之后,按返回按鈕返回來(lái)想進(jìn)行頁(yè)面自動(dòng)刷新,為的就是讓用戶看到新的內(nèi)容。

做法:

使用pageshow進(jìn)行整個(gè)頁(yè)面刷新

window.addEventListener('pageshow', function (e) {
if (e.persisted) {
window.location.reload()
}
})

這樣可以實(shí)現(xiàn)。

后面又覺得不妥,沒有因?yàn)檫@個(gè)小部分而進(jìn)行整個(gè)頁(yè)面刷新,想到了另一種思路:因?yàn)檫@個(gè)iframe中的內(nèi)容是動(dòng)態(tài)的,可以對(duì)其進(jìn)行定時(shí)器設(shè)置,如下:

let iframe = document.getElementById('iframe')
setInterval(() => {
iframe.setAttribute("src", "https://cpu.baidu.com/xx/xx/xx");
},15000)

這樣也可以實(shí)現(xiàn)自己的功能。

最后可以結(jié)合一下:

let iframe = document.getElementById('iframe')
window.addEventListener('pageshow', function (e) {
 if (e.persisted) {
  iframe.setAttribute("src", "https://cpu.baidu.com/xx/xx/xx");
 }
})

這樣做也有好處,可以避免使用定時(shí)器,對(duì)網(wǎng)頁(yè)的性能也是比較好。但是這個(gè)方法在返回的時(shí)候,可以看到iframe里面內(nèi)容的重新加載,會(huì)有一個(gè)時(shí)間間隙。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • JS使用post提交的兩種方式

    JS使用post提交的兩種方式

    這篇文章主要介紹了JS使用post提交的兩種方式,實(shí)例分析了兩種JavaScript使用post提交的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • document.cookie 使用小結(jié)

    document.cookie 使用小結(jié)

    這篇文章主要介紹了document.cookie 使用,主要包括cookie設(shè)置,修改cookie值及獲取cookie值的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • JavaScript函數(shù)、方法、對(duì)象代碼

    JavaScript函數(shù)、方法、對(duì)象代碼

    函數(shù)定義可以嵌套在其他函數(shù)中,常用作子函數(shù)。但不能出現(xiàn)在循環(huán)或條件語(yǔ)句中。
    2008-10-10
  • js進(jìn)行表單驗(yàn)證實(shí)例分析

    js進(jìn)行表單驗(yàn)證實(shí)例分析

    這篇文章主要介紹了js進(jìn)行表單驗(yàn)證的方法,實(shí)例分析了各種常見的js表單驗(yàn)證技巧,需要的朋友可以參考下
    2015-02-02
  • javascript實(shí)現(xiàn)攝像頭拍照預(yù)覽

    javascript實(shí)現(xiàn)攝像頭拍照預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)攝像頭拍照預(yù)覽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 原生js寫的放大鏡效果

    原生js寫的放大鏡效果

    在淘寶上購(gòu)物時(shí),總會(huì)看到類似放大鏡的效果。以下為原生js寫的一個(gè)放大鏡效果,其中肯定有很多不足,請(qǐng)大牛們指正,謝啦
    2012-08-08
  • jqGrid讀取選擇的多行的某個(gè)屬性代碼

    jqGrid讀取選擇的多行的某個(gè)屬性代碼

    這篇文章主要介紹了jqGrid讀取選擇的多行的某個(gè)屬性實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-05-05
  • js為數(shù)字添加逗號(hào)并格式化數(shù)字的代碼

    js為數(shù)字添加逗號(hào)并格式化數(shù)字的代碼

    數(shù)字添加逗號(hào)的方法有很多,在本將為大家介紹下使用js來(lái)實(shí)現(xiàn),具體如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-08-08
  • JS數(shù)字精度丟失的原因及解決方案

    JS數(shù)字精度丟失的原因及解決方案

    JS的數(shù)字類型一旦數(shù)字超過限值,JS將會(huì)丟失精度,導(dǎo)致前后端的值出現(xiàn)不一致,這篇文章主要給大家介紹了關(guān)于JS數(shù)字精度丟失的原因分析及解決方法,需要的朋友可以參考下
    2022-04-04
  • javascript設(shè)計(jì)模式 – 裝飾模式原理與應(yīng)用實(shí)例分析

    javascript設(shè)計(jì)模式 – 裝飾模式原理與應(yīng)用實(shí)例分析

    這篇文章主要介紹了javascript設(shè)計(jì)模式 – 裝飾模式,結(jié)合實(shí)例形式分析了javascript裝飾模式基本概念、原理、應(yīng)用場(chǎng)景及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04

最新評(píng)論

崇州市| 福鼎市| 凤阳县| 浙江省| 慈溪市| 久治县| 新巴尔虎左旗| 古交市| 民丰县| 汉源县| 北票市| 闽侯县| 荥阳市| 札达县| 沽源县| 利津县| 嵊泗县| 三门峡市| 井研县| 榕江县| 九台市| 康平县| 大安市| 星子县| 晋中市| 琼中| 滦南县| 板桥市| 盐边县| 依兰县| 遂平县| 沿河| 若尔盖县| 罗田县| 土默特右旗| 丰顺县| 彩票| 肇庆市| 七台河市| 景泰县| 阿荣旗|