2015-06-23 2 views
3

Я разрабатываю веб-приложение. И я написал несколько сценариев JS для выполнения на готовом документе. Но в хроме, когда мы нажимаем кнопку «Назад» и возвращаемся на предыдущую страницу, он снова запускает весь скрипт js. Но когда я использую то же самое в firefox, он не выполняет JS.Chrome, выполняющий все JS снова на кнопке браузера

У меня есть аккордеон на странице, и когда пользователь открывает любой аккордеон и идет по одной из ссылок под аккордеон, а после этого, если снова нажимает кнопку «Назад» на странице аккордеона, хром закрывает все аккордеоны, как я написал сценарий, чтобы закрыть все эти документы наготове. Но firefox не закрывается.

Есть ли способ исправить это с помощью javascript? Чтобы я мог поместить любое условие, например if(history.forward.length < 1){ do this....}

+0

[Относящиеся] (http://stackoverflow.com/questions/2638292/after-travel-back-in-firefox-history-javascript-wont-run), но OP хочет противоположного поведения, но может дать некоторые идеи. –

ответ

1

Вы можете использовать событие showhow, чтобы гарантировать, что вы всегда обнаруживаете навигацию на определенную страницу, независимо от того, нажимает ли пользователь кнопку «назад/вперед» или выбирает ссылку, и независимо от того, браузер используется.

Затем вы можете выполнять проверки относительно состояния пользовательского интерфейса и выполнять логику по мере необходимости (т. Е. Изменять пользовательский интерфейс, предотвращать выполнение дополнительной JS).

window.addEventListener('pageshow', function(event) { // check state of UI, etc. });

+0

Пример того, что вы имеете в виду, будет замечательным. что вы можете использовать свойство persisted для проверки того, что Chrome использует страницу вне кеша, но значение всегда будет ложным. – Jacques

0

В моем случае, IFrame был скрытый IFrame (ширина и высота равна нулю).

Этот iframe является всего лишь обходным путем из унаследованной системы, разработанной 12 лет назад. Но по-прежнему используется в настоящее время по текущему приложению.

Чтобы решить эту проблему, я просто перенаправил страницу, загруженную в iframe, на пустую страницу.

Пример:

page_loaded_into_iframe.php

<?php 
//do the php stuffs 
?> 
<script> 
alert("hello world"); 
location.href = "about:blank"; // here, where the the magic happens! 
</script> 

После нажатия "кнопки назад", браузер будет перезагружать пустую страницу.

Помните, что это может быть неприменимо, если ваш случай не похож на мой.

1

Решение, которое пришло мне в голову, использует sessionStorage, чтобы узнать, загружена ли она в первый раз или нет. Или даже лучше, вы можете сохранить состояние ваших аккордеонов в хранилище сеансов, чтобы всегда было так, как этого хочет пользователь.

0

В расширения Chrome можно использовать функцию:

 
chrome.webNavigation.onCommitted.addListener(function callback) 

и в функции обратного вызова, вы можете взглянуть на аргументы:

transitionType + transitionQualifiers

искать:

«forward_back» Пользователь использовал кнопку «Вперед» или «Назад», чтобы начать навигацию.

Для deatils см chrome.webNavigation

Конечно, это событие может быть передано в сценарий контента с обычной моделью сообщений (см: Message Passing

Смежные вопросы