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", так как не распознает его.