javascript中的pageShow事件
我有以下代码:javascript中的pageShow事件,javascript,jquery,Javascript,Jquery,我有以下代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="http://code.jquery.com/jquery-1.4.4.min.js"></script> <script type="text/javascript" language="
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type="text/javascript" language="javascript">
$( function() {
window.onload = function () {
alert('This page was just hidden:');
}
});
</script>
</head>
<body pageshow="alert('Done');">
<div id="mypage" data-role="page" data-theme="b">
<div data-role="header">
<h1>Page 2</h1>
</div>
<div data-role="content">
<p>This is page 2.</p>
</div>
</div>
</body>
</html>
$(函数(){
window.onload=函数(){
警报('此页面刚刚隐藏:');
}
});
第2页
这是第2页。
但是IE中没有触发
pageShow
事件。知道为什么吗?您的jQuery代码永远不会执行。您应该在jQuery的“就绪”事件中运行它:
OnPageShow和OnPageHide是,因此只能享受有限的浏览器支持(在撰写本文时) 更可能的是,现有浏览器的更高版本将支持它。Firefox肯定会,Safari也会 我找不到任何明确的说明,但我想说的是,您正在使用的IE版本可能不支持这些事件。你可以把这些信息贴出来澄清一下吗
希望这有帮助您的代码不一致。您正在同时使用
jQuery.ready
,onload
,onpageshow
。似乎是开始重构过程的好地方
您真正想要实现什么?取消
窗口。onload
和pageshow
。无论您希望在窗口加载、正文加载或页面显示时执行什么,请将它们放入$(document).ready()
,一旦加载页面,它们将连续执行。旧版本的Internet Explorer不支持PageShow事件,这很可能是您遇到的问题。这是一个错误;在body的标记中,事件的名称是“onpageshow”,而不是“pageshow”
。。。
...
不支持IE pageshow事件。来自我的测试:
- IE8/9不支持页面显示/页面隐藏
- Chrome12触发它们,但似乎没有页面缓存-它们的行为与加载/卸载相同
- FF4如预期的那样支持它们
- iPad上的iOS支持它们,正如预期的那样
pageShow
在pageLoad
后点火
最好使用onLoad
pageShow
应该是onpageShow
pageShow事件在许多浏览器中都不起作用,例如,如果在移动应用程序中使用WebView或UIWebView
相反,你需要一个四管齐下的攻击:
onfocus
在桌面页面和某些移动页面恢复活力时发生pageshow
发生在iOS Safari恢复活力时,但不是UIWebViewvisibilitychange
在Windows Mobile IE11恢复使用时发生-请参阅并尝试编辑:看起来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));
}
如果您希望支持@ibhbuhbubhb:您能将jQuery代码移动到文档的
中吗?您的意思是就绪事件$(函数(){});jQuery的速记功能准备好了吗。你什么时候调用过pageShow
?什么是pageShow
事件?我是从中读到的。您是否仅在firefox中运行此页面?不,我还必须在ie中运行它。因此该命令仅在FF中工作。只需使用onload——或者因为您使用的是jQuery,所以使用jQuery load events…$(document).ready()不会在页面加载完成时触发,而是在DOM准备就绪时触发$load()相当于使用Yesh Yesh!但这是放置代码的最佳位置,一旦页面加载(DOM就绪),就需要执行这些代码。同意。你到底想干什么+1这可能是一个学习练习。他们可能只想获得更好的理解是的,或者只是在你上面的w3schools.com链接上给某人+50赏金和捐赠者徽章给他自己404。为什么这被否决了?!四年后?!当时的事实是正确的。Pageshow出现在IE 11中!看起来它在IE11和Edge中得到了支持。我想我应该澄清一下,旧版本的IE不支持它。我已经就如何支持旧版本的浏览器给出了非常详细的回答。请注意,IE8、IE9、IE10在2016年1月后基本上不受Microsoft支持,因此根据项目的不同,您可能可以避免支持它们-请参阅-并且您至少应该编辑您的答案以将其更新为正确的信息。我不知道我可以编辑我的原始帖子。。。我刚刚更新过。
...
<body onpageshow="alert('Done');">
...
$(function(){ //your code })
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));
}