javascript中的pageShow事件
我有以下代码:
$( function() { window.onload = function () { alert('This page was just hidden:'); } }); Page 2
This is page 2.
但是pageShow
事件没有在IE中触发。 知道为什么吗?
OnPageShow和OnPageHide是新的HTML5事件属性 ,因此只能享受有限的浏览器支持(在撰写本文时)
更高版本的现有浏览器更有可能支持它。 Firefox肯定会和Safari一样根据这篇文章 。
我找不到任何明确说明的东西,但我想说你正在使用的IE版本可能不支持这些事件。 您可以发布此信息以便澄清。
希望这可以帮助
您的代码不一致。 你正在使用jQuery.ready
, onload
, onpageshow
。 似乎是开始重构过程的好地方。
你真的想要实现什么?
这是一个错误; 在body的标签中,事件的名称是“onpageshow”而没有“pageshow”。
... ...
对于IE页面显示事件不受支持。
从我的测试:
- IE8 / 9不支持pageshow / pagehide
- Chrome12会触发它们,但似乎没有页面缓存 – 它们的行为与加载/卸载相同
- FF4按预期支持它们
- iPad上的iOS按预期支持它们
你的jQuery代码永远不会被执行。 你应该在jQuery的“ready”事件中运行它:
$( function() { $('#mypage').live('pageshow', function (event, ui) { alert('This page was just hidden: ' + ui.prevPage); }); });
旧版本的Internet Explorer不支持PageShow事件,这很可能是您遇到的问题。
取消window.onload
和pageshow
。 无论你想在窗口加载,body加载或页面显示上执行什么,都将它们放在$(document).ready()
,它们将在页面加载后连续执行。
我正在使用FF 4.0.1
你的pageShow事件即使在此也不会触发。
点击这里
欲获得更多信息
更新: pageShow
在pageLoad
之后触发。
最好使用onLoad
。
pageShow
应该是onpageShow
pageshow事件在许多浏览器中不起作用,例如,如果在移动设备上的App中使用WebView或UIWebView。
相反,你需要一个四管齐下的攻击:
-
桌面页面和一些移动页面恢复生命时会发生
onfocus
-
当iOS Safari恢复
pageshow
时会发生pageshow
– 而不是UIWebView -
Windows Mobile IE11恢复生机时出现
visibilitychange
– 请参阅http://daniemon.com/tech/webapps/page-visibility/并尝试http://jsbin.com/runed/4编辑:看起来像WP8.1上的IE11现在支持pageshow事件。 -
webkitRequestAnimationFrame
检测移动应用程序内的页面是否重新聚焦。 需要解决方法,因为window.focus,visibilitychange和pageshow事件在Android应用程序(WebView)或iOS应用程序(UIWebView)中不起作用。
代码可能如下所示:
window.addEventListener('focus', pageAwakened); window.addEventListener('pageshow', pageAwakened); window.addEventListener('visibilitychange', function() { !document.hidden && pageAwakened(); }); if (window.webkitRequestAnimationFrame && (/^iP/.test(navigator.platform) || /Android/.test(navigator.userAgent))) { webkitRequestAnimationFrame(webkitWake); } var lastTs; function webkitWake(timestamp) { if ((timestamp - lastTs) > 10000) { pageAwakened(); } lastTs = timestamp; webkitRequestAnimationFrame(webkitWake); } function pageAwakened() { console.log('awakened at ' + (new Date)); }
如果您希望支持<= IE8或documentMode <= 8,则需要attachEvent进行焦点。
编辑:请注意,大多数现代浏览器(包括桌面IE11和桌面Edge)都支持pageshow事件。
$(function(){ //your code })
是$(document).ready()的简写。 document.ready在加载DOM之后触发,在其中添加window.onload是不必要的。
IE不会触发“pageshow”事件,因为它无法识别它。