jquery mobile有两种方式:一种是使用ajax方式,即每次只是更新data-role=page的div的内容(即我们其实一直在一个页面上,只是通过ajax在修改部分内容),另一种方式是使用非ajax方式,每次都加载单独的html页面。
之前使用cordova开发H5 App的时候一直使用ajax方式,pagehide事件用的没啥问题;而这次使用了非ajax方式,pagehide事件无法fire了。而pagebeforeshow,pageshow事件在两种情况下都OK。
ajax方式下事件执行过程参考:
Understanding jQuery-Mobile page firing events - why dialog pageshows when closing
在非ajax方式下的替代方案:
浏览器也有自己的nativepagehide event,可以使用浏览器的pagehide event
if (typeof window.addEventListener) {
window.addEventListener("pagehide", function () {
console.log('browser pagehide');
});
}
参考:
jQuery Mobile pagehide and native pagehide DOM events
既然涉及到window的native事件,那么其pagebeforeunload以及pageunload事件也可以使用。