PageShow событие в javascript

У меня есть следующий код:

<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. Любая идея почему?

Ответ 1

OnPageShow и OnPageHide новые атрибуты событий HTML5 и, как таковые, будут пользоваться ограниченной поддержкой браузера (на момент написания)

Скорее всего, его поддерживают более поздние версии существующих браузеров. Firefox, безусловно, будет, как и Safari в соответствии с этой статьей.

Я не мог найти ничего, что бы заявляло это окончательно, но я бы сказал, что его вероятность того, что эти события не поддерживаются в версии IE, которую вы используете. Можете ли вы опубликовать эту информацию для уточнения.

Надеюсь, что это поможет

Ответ 2

Ваш код несовместим. Вы используете одновременно jQuery.ready, onload, onpageshow. Кажется хорошим местом для начала процесса рефакторинга.

Чего вы действительно хотите достичь?

Ответ 3

Это неправильное поведение; в теге тела имя события "onpageshow" и "просмотр страниц".

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

Для событий с IE-страницей не поддерживается.

Ответ 4

Ваш код jQuery никогда не будет выполнен. Вы должны запустить его из jQuery "готового" события:

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

Ответ 5

Событие PageShow не поддерживается в более старых версиях Internet Explorer, что, скорее всего, является проблемой, с которой вы сталкиваетесь.

Ответ 6

Из моих тестов:

  • IE8/9 не поддерживает просмотр страниц/страницу
  • Chrome12 запускает их, но не имеет кэша страниц - они ведут себя так же, как load/unload
  • FF4 поддерживает их как ожидаемые
  • iOS на iPad поддерживает их как ожидалось

Ответ 7

Уберите window.onload и pageshow. Независимо от того, что вы хотите выполнить при загрузке окна, загрузке тела или просмотре страницы, поместите их в $(document).ready(), они будут выполняться серийно после загрузки страницы.

Ответ 8

Я использую FF 4.0.1

ваше событие showShow не срабатывает даже в этом.

нажмите здесь

для получения дополнительной информации

Update: pageShow огонь после pageLoad.

лучше использовать onLoad.

pageShow должен быть onpageShow

Ответ 9

Событие "страницы" не работает во многих браузерах, например. при использовании WebView или UIWebView в приложении на мобильных устройствах.

Вместо этого вам потребуется четыре атаки:

  • onfocus возникает, когда страницы рабочего стола и некоторые мобильные страницы оживают

  • pageshow происходит, когда iOS Safari возвращается к жизни, но не UIWebView

  • visibilitychange возникает, когда Windows Mobile IE11 возвращается к жизни - см. http://daniemon.com/tech/webapps/page-visibility/ и попробуйте http://jsbin.com/runed/4 Редактировать: похоже, что IE11 в WP8.1 теперь поддерживает событие showhow.

  • 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) поддерживают событие showhow.

Ответ 10

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

Является сокращением для $(document).ready(). document.ready запускается сразу после загрузки DOM, добавив в него окно. Загрузка внутри него не требуется.

IE не запускает событие "pagehow", так как не распознает его.