javascript中的pageShow事件

时间:2011-06-15 19:31:58

标签: 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="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>

pageShow事件未在IE中触发。知道为什么吗?

10 个答案:

答案 0 :(得分:21)

OnPageShow和OnPageHide是new HTML5 event attributes,因此只能享受有限的浏览器支持(在撰写本文时)

以后版本的现有浏览器更有可能支持它。根据{{​​3}},Safari肯定会和Safari一样。

我找不到任何明确说明的内容,但我想说你正在使用的IE版本可能不支持这些事件。您可以发布此信息以便澄清。

希望这有帮助

答案 1 :(得分:8)

您的代码不一致。您同时使用jQuery.readyonloadonpageshow。似乎是开始重构过程的好地方。

你真正想要实现的目标是什么?

答案 2 :(得分:4)

这是一个错误;在body的标签中,事件的名称是“onpageshow”而没有“pageshow”。

...
<body onpageshow="alert('Done');">
...

对于IE页面显示事件不受支持。

答案 3 :(得分:1)

您的jQuery代码永远不会被执行。你应该在jQuery的“ready”事件中运行它:

$( function() {
    $('#mypage').live('pageshow', function (event, ui) {
        alert('This page was just hidden: ' + ui.prevPage);
    });
});

答案 4 :(得分:1)

旧版本的Internet Explorer不支持PageShow事件,这很可能是您遇到的问题。

答案 5 :(得分:1)

从我的测试:

  • IE8 / 9不支持pageshow / pagehide
  • Chrome12会触发它们,但似乎没有页面缓存 - 它们的行为与加载/卸载相同
  • FF4按预期支持
  • iPad上的iOS支持预期

答案 6 :(得分:0)

取消window.onloadpageshow。无论你想在窗口加载,身体加载或页面显示上执行什么,都将它们放在$(document).ready()中,一旦页面加载,它们将被连续执行。

答案 7 :(得分:0)

我正在使用FF 4.0.1

你的pageShow事件即使在此也不会触发。

click here

了解更多信息

<强>更新 pageShow之后pageLoad点火。

最好使用onLoad

pageShow应为onpageShow

答案 8 :(得分:0)

页面显示事件在许多浏览器中都不起作用,例如如果在移动设备上的应用程序中使用WebView或UIWebView。

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

    当桌面页面和某些移动页面恢复生命时,会发生
  1. onfocus

  2. 当iOS Safari恢复生机时会发生
  3. pageshow - 而不是UIWebView

  4. 当Windows Mobile IE11恢复生机时,会发生
  5. visibilitychange - 请参阅http://daniemon.com/tech/webapps/page-visibility/并尝试http://jsbin.com/runed/4编辑:看起来WP8.1上的IE11现在支持pageshow事件。< / p>

  6. webkitRequestAnimationFrame检测移动应用内的页面是否重新聚焦。需要解决方法,因为window.focus,visibilitychange和pageshow事件不适用于Android应用程序(WebView)或iOS应用程序(UIWebView)。

  7. 代码可能如下所示:

    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));
    }
    

    如果您希望支持&lt; = IE8或documentMode&lt; = 8,则需要使用attachEvent进行焦点。

    编辑:请注意,大多数现代浏览器(包括桌面IE11和桌面边缘)都支持pageshow事件。

答案 9 :(得分:-1)

$(function(){ //your code })

是$(document).ready()的简写。在加载DOM之后,document.ready会激活,在其中添加window.onload是不必要的。

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