2013-08-28 3 views
0

Я хотел бы написать код javascript, способный что-то сделать на любом window.onpopstate или window.onload, но никогда дважды (обратите внимание, что chrome запускает событие popstate как onload и при нажатии на кнопку возврата навигации)Сделайте что-нибудь на window.onpopstate или window.onload, но никогда не дважды

Я хотел бы, чтобы это было совместимо для основных современных браузеров (IE10 светлячок хром опера сафари)

и я предпочел бы не использовать любую библиотеку - даже не JQuery.

Нечто подобное (но с правильным синтаксисом, конечно):

window.onload || window.onpopstate = function(){ 
    window.alert("hello world"); 
} 

Благодарности

EDIT 1

С ур предложения я попытался это:

var ranAlready=false; 

window.onload = function(){ 
if (!ranAlready){ 
    window.alert("onload was true"); 
    ranAlready=true; 
} 
}; 

window.onpopstate = function(){ 
if (!ranAlready){ 
    window.alert("popstate was true"); 
    ranAlready=true; 
} 
}; 

Но теперь я не уверен, как установить переменная обратно в ложь .. Потому что это зависит от браузера и так далее ..

EDIT 2

мне нужно работать больше, чем когда-то, потому что пользователь может нажать некоторые АЯКС ссылки и т.д. страница не обновится, но URL изменится, и, таким образом, он может нажать кнопку «Назад». Это означает, что в какой-то момент переменная должна быть установлена ​​на значение false, но я не знаю, когда ..

+0

Использование переменной для проверки побежал ли это уже? – SLaks

+0

, что будет работать? я запутался becasue, я не знаю, как управлять потоком времени, например, будет ли эта переменная принимать значение до или после или в то же время, что я проверяю его ..? – fartagaintuxedo

+0

и как вернуть его обратно в false.? – fartagaintuxedo

ответ

2

Проблема в том, что в Chrome событие «popstate» запускается при загрузке страницы, поэтому обработчик будет работать дважды , Вы можете исправить это, проверив состояние истории при запуске на popstate, чтобы определить, работает ли она при начальной загрузке.

function showAlert() { 
    window.alert("hello world"); 
} 
function showAlertOnPopState(){ 
    if (window.history.state == null){ // This means it's page load 
     return; 
    } 
    showAlert(); 
} 

window.onload = showAlert; 
window.onpopstate = showAlertOnPopState; 

Fiddle: http://jsfiddle.net/ER8zC/2/

Найденный history.state Хитрость здесь: Popstate on page's load in Chrome

+0

это синтаксическая ошибка 'window.onload || window.onpopstate = function() {' – fartagaintuxedo

+0

Обновленный ответ. Я предположил, что ваш оригинальный синтаксис действителен. – htxryan

+0

спасибо, см. Также мое редактирование, как мне теперь установить переменную в false? – fartagaintuxedo