2012-02-10 3 views
0

Как представляется, я не могу получить событие onload = "..." для запуска в Safari, когда страница вводится с помощью кнопки «Назад». Он отлично работает в FF и IE. Есть ли решение Javascript или jQuery?Safari <body onload> Событие не запускается с обратной кнопки

Любая помощь приветствуется.

+0

она работает в хроме? –

+0

Что делает код, связанный с событием 'onload'? Вы уверены, что это событие вообще не стреляет, или это просто не делает ничего видимого? –

+0

Jorge Pinho. Я еще не использовал Chrome. Все еще работает через браузеры ... –

ответ

0

Вместо того чтобы использовать атрибут <body> тега onload, вы могли бы вместо того, чтобы попытаться использовать готовое событие DOM с JQuery, например, так:

$(document).ready(function() { 
    // your code here 
}); 

Или сокращенную версию:

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

Даже если это не решит вашу проблему с Safari, она по-прежнему является хорошей практикой в ​​целом, потому что она отделяет ваш HTML и Javascript от легко различимых частей.

+0

Привет Энтони. Я только что пробовал это, но он тоже срабатывает только в FF и IE. –

3

Try:

window.addEventListener("pageshow", function() { 
    alert('page shown'); 
}, false); 

Для Opera браузера, прочитать: http://samuli.hakoniemi.net/onload-issues-with-opera/

+0

zvona, спасибо, я дам это сейчас ... –

+0

Звона, я делаю это, но ничего не происходит. Является ли пример кода хорошим для разреза и пастера на моем сайте, т. Е. Что-то нужно изменить? –

+0

Хорошо. Я тестировал его с Chrome и работал, не знаю о Safari. Вы можете прочитать эту статью, если это поможет: http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/ – zvona

0

Это хорошо известно. Safari и многие другие браузерные кешируют страницу, и когда вы переходите к ней, они просто восстанавливают предыдущее состояние.

Вот хороший MDN статьи по этой теме (речь идет о FF 1,5, но должны применяться с другими браузерами, а): https://developer.mozilla.org/En/Using_Firefox_1.5_caching

Попробуйте pageshow событие, как @zvona предложил.

+0

Привет, Jan, у меня есть страница для запуска в Safari и FF, но не в IE. Знаете ли вы, что он должен там работать? Если это не так, как я могу различать браузеры, чтобы избежать doc.ready и pagshow, вызывающего функцию дважды? –

0

Если событие onload не запущено, вы должны установить кеш-контроль.

<head> 
<meta charset="utf-8"> 
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 

или добавить тег в организме:

<iframe style=”height:0px;width:0px;visibility:hidden” src=”about:blank”> 
this frame prevents back forward cache 
</iframe>