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支持它们,正如预期的那样
是$(document).ready()的缩写。document.ready在加载DOM后立即激发,不需要在其中添加window.onload

IE不会启动“pageshow”事件,因为它无法识别它。

我使用的是FF 4.0.1

即使在这种情况下,你的pageShow活动也不会启动

更多信息

更新:
pageShow
pageLoad
后点火

最好使用
onLoad


pageShow
应该是
onpageShow

pageShow事件在许多浏览器中都不起作用,例如,如果在移动应用程序中使用WebView或UIWebView

相反,你需要一个四管齐下的攻击:

  • onfocus
    在桌面页面和某些移动页面恢复活力时发生

  • pageshow
    发生在iOS Safari恢复活力时,但不是UIWebView

  • visibilitychange
    在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));
    }