2016-07-25 76 views
0

下面的代码检查url是否已加载,然后登录到控制台。我想知道是否有简单,干净的方法来检查页面是否从bfcache或http缓存中加载? Firefox文档指出,如果我从URL A转到B,然后将后退按钮转到URL A,则不应触发load事件,但这不是我的经验,无论是load还是PageShow都会被记录,不管有没有人知道为什么?检查页面是否从bfcache,HTTP缓存或新检索的页面加载

var tabs = require("sdk/tabs"); 

function onOpen(tab) { 
    tab.on("pageshow", logPageShow); 
    tab.on("load", logLoading); 
} 

function logPageShow(tab) { 
    console.log(tab.url + " -- loaded (maybe from bfcache?) "); 
} 

function logLoading(tab) { 
    console.log(tab.url + " -- loaded (not from bfcache) "); 
} 

tabs.on('open', onOpen); 
+0

如果您要对有关文档的陈述作出声明,请提供指向文档的链接。 – Makyen

回答

0

我不知道是否有任何目的的API,但来考虑解决方法是检查performance.timing.responseEnd - performance.timing.requestStart的价值。如果它是<= 5那么最有可能是HTTPback-forward cache。否则,它是从网上下载的。

通过back按钮而不是打开干净的URL来识别返回页面的方法是使用history API。例如:

// on page load 
var hasCameBack = window.history && window.history.state && window.history.state.customFlag; 
if (!hasComeBack) { 
    // most likely, user has come by following a hyperlink or entering 
    // a URL into browser's address bar. 
    // we flag the page's state so that a back/forward navigation 
    // would reveal that on a comeback-kind of visist. 
    if (window.history) { 
     window.history.replaceState({ customFlag: true }, null, null); 
    } 
} 
else { 
    // handle the comeback visit situation 
} 

另请参阅Manipulating the browser history文章在MDN。

相关问题