Подтвердить что ты не робот

Запустить Firefox для перезагрузки страницы на кнопку "Назад"

Как сделать javascript для повторного запуска Firefox и перезагрузить всю страницу, когда пользователь нажимает кнопку "Назад"? Я смог сделать это во всех браузерах, кроме Firefox, с помощью другого вопроса SO, добавив этот код:

history.navigationMode = 'compatible';
$("body").unload(function(){})

А также добавление iFrame... Но это не работает в Firefox. Что делать?

4b9b3361

Ответ 1

добавьте это между вашими тегами HEAD

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

Ответ 2

В моем случае после того, как конечный пользователь отправит свои новые данные на сервер, он перенаправляется на другую страницу. Но когда конечный пользователь нажимает кнопку "Назад", форма предварительно заполняется старыми данными. Таким образом, необходима страница перезагрузки.

Я сделал обходной путь для Firefox и еще один для Google Chrome. У них другое поведение для отображения страниц в кеше.

Выполнение этого не позволит Firefox кэшировать страницу, а кнопка "Назад" приведет страницу к серверу.

window.onunload = function(){};

Но Google Chrome делает это по-другому, и решение выше не работает для меня. Поэтому я сделал еще один способ обхода Chrome. Я сделал флаг, который помечает форму как грязную.

В верхней части <head> перед загрузкой ничего, я проверяю файл cookie

if(document.cookie.match(/my-form=dirty/)) {
  document.cookie = "my-form=; expires=-1; path="+document.location.pathname;
  window.location.reload();
}

С помощью jQuery я пишу cookie, когда пользователь что-то меняет

$(document).load(function(){
  $(':input').change(function(){
    document.cookie = "my-form=dirty; expires=86400000; path="+document.location.pathname;
  })
})

Полезно знать:

Ответ 3

Это решение сработало для меня (и я считаю, что это немного проще, чем другие предлагаемые решения):

    $(window).bind('pageshow', function() {
        // This event is called only by FireFox. Because Firefox doesn't reload the page when the user uses the back button,
        // or when we call history.go.back(), we need to force the reload for the applicatino to work similar to Chrome and IE (11 at least).

        // Doc: https://developer.mozilla.org/en-US/docs/Listening_to_events_in_Firefox_extensions
        location.reload();
    }); 

Я вызываю этот код при каждой загрузке страницы, если браузер FireFox. (Чтобы узнать, работает ли в данный момент браузер Firefox, см. здесь).

Ответ 4

Для справки, что свойство navigationMode применимо только к Opera, это просто, что IE и браузеры Webkit уже имеют поведение, которое задавал запрос.

IE и Webkit делают то, что Opera назвала бы "совместимой" навигацией. Firefox делает то, что Opera назвала бы "быстрой" навигацией. Но это только в Opera, что это поведение действительно управляемо.

Ответ 5

Вы можете использовать этот script, который можно найти здесь:

http://www.easy-coding.de/wiki/html-ajax-und-co/onload-event-cross-browser-kompatibler-domcontentloaded.html#headline9

Демо: http://demo.easy-coding.de/javascript/onload-event-cross-browser/

Источник: http://www.easy-coding.de/wiki/html-ajax-und-co/onload-event-cross-browser-kompatibler-domcontentloaded.html#headline8

Этот script доступен под лицензией MIT/GPL.

В противном случае вы можете использовать DOM-событие Gecko: DOMContentLoaded

Ответ 6

Ничего из этого не сработало для меня. Я делаю это с помощью проверки файлов cookie. Я импортирую jsp (источник ниже) в главной части страницы, а затем вызываю refreshOnBack.

<%@ page import="java.util.UUID" %>
<script>
    var REFRESH_PAGE_COOKIE_NAME="refreshPage_";
    var PAGE_REFRESH_GUID = "<%out.print(UUID.randomUUID().toString());%>";  
    /* To force refresh of page when user or javascript clicks "back",
     * put call to this method in body onload function - NOT THROUGH JQUERY 
     * as jquery onload is not called on history back.
     * In must be done via <BODY onload="...">
     */
    function refreshOnBack(){
        //Alghoritm uses cookies to check if page was already loaded.
        //Cookies expiration time is not set - will be gone after browser restart.
        //Alghoritm:
        //is cookie set? 
        // -YES - reload;
        // -NO - set it up;
        //Cookie contains unique guid in name so that when page is regenerated - it will not reload.
        var cookieName = REFRESH_PAGE_COOKIE_NAME + PAGE_REFRESH_GUID; 
        if(getCookie(cookieName)=="Y"){
            window.location.reload();
        } else {
            setCookie(cookieName,"Y");
        }
    }   
</script>

Ответ 7

Я думаю, что ответ, который вам может понадобиться, здесь: fooobar.com/questions/8783/...

TL;DR: HTTPS + Cache-Control: must-revalidate в качестве заголовка, отправленного сервером + Expires, который был установлен в прошлом, должен заставить его работать. Вот пример реализации PHP:

<?php

$expires = gmdate( 'D, d M Y H:i:s', time() - 1 );

header( 'Cache-Control: must-revalidate' );
header( "Expires: {$expires} GMT" );

?>
<!DOCTYPE html>
<html>
    <head>
        <title>Auto-reloading page</title>
    </head>
    <body>
        <p>The current day is <?php echo date( 'd, F Y'); ?> and the time is <?php echo date('H:i:s'); ?>.</p>
        <p><a href="http://google.com">Click away</a></p>
    </body>
</html>

Ответ 8

Если вы используете С#.Net, вы можете обрабатывать его на загрузке страницы или инициировать событие программно

Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["*"] = true;

Для получения дополнительной информации, откройте Response.Cache в MSDN: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.cache(v=vs.110).aspx