id Powiedzmy, że jestem na/strona = 1post-redirect-get (PRG) ponowne wstawienie samą stronę w historii w przeglądarkach WebKit
Potem przejdź do/strony id = 2
I dokonuję zmiany na tej stronie, która implementuje wpis, a następnie przekierowuje z powrotem do/page? Id = 2
Mogę nacisnąć raz przycisk wstecz i powrócić do/page? Id = 1, ale w przeglądarce Chrome i Safari na iPhonie muszę dwukrotnie nacisnąć przycisk Wstecz, ponieważ/page? id = 2 jest w historii przeglądarki dwukrotnie. (Gdybym zrobił wiele postów od id = 2, musiałbym nacisnąć wielokrotnie przycisk powrotu, by w końcu powrócić do id = 1).
Pod pewnymi względami wydaje się to normalnym zachowaniem przeglądarki, ponieważ GET jest po prostu wrzucony do historii, ale ponieważ adres URL jest identyczny z poprzednim wpisem, powoduje to słabą wygodę użytkownika, której zwykle unikają inne aplikacje internetowe ... i jest naturalnie omijany w Firefoksie. Czy jest to nieunikniony błąd w przeglądarkach Webkit, czy mogę wdrożyć PRG w inny sposób, aby tego uniknąć?
btw- zachowanie wydaje się być taka sama przekierowanie z 302 lub 303.
UPDATE: Mam wyśmiewali się przykładowy kod ... nie wiem, czy jest to platforma gdzie jak jsfiddle mogę przesłać to, aby zobaczyć w akcji:
form.php:
id=<?=$_REQUEST['id']?>
<form action="submit.php" method="post">
<input type="hidden" name="id" value="<?=$_REQUEST['id']?>">
<input type="submit" value="submit">
</form>
submit.php:
<?php
header("Location: form.php?id=" . $_REQUEST['id']);
die($_REQUEST['id']);
?>
Jeśli uruchamiam na form.php? Id = 4 (wystarczy umieścić go w historii przeglądarki), a następnie przejdź do form.php? Id = 5, a następnie naciśnij przycisk submit (tak, jakby dokonać zmiany w bazie danych), w Firefoksie otrzymuję po jednym wpisie w historii dla każdego; w Chrome otrzymuję jedną pozycję dla id = 4, a następnie dwie pozycje dla id = 5. Dlaczego różnica w zachowaniu? Uważam, że zachowanie Firefoksa jest lepsze, ponieważ dwukrotne trafienie w celu uniknięcia id = 5 jest sprzeczne z intuicją użytkownika.
Dziękuję. Rozumiem, jak to działa, ale wow, dość okrężne podejście, wymagające elementów iframe, javascript itp. Do prostego przesyłania formularzy (i mając nadzieję, że przeglądarka nie zanieczyszcza swojej historii z powodu elementu iframe). Nadal mam nadzieję, że ktoś może odnieść się do podstawowej mechaniki zachowania historii przeglądarki podczas standardowego PRG w Webkit i sprawdzić, czy istnieje bardziej bezpośrednia poprawka do rozwiązania problemu. – dlo
Dzięki za miły komentarz. I tak, byłoby miło uzyskać prawdziwe wyjaśnienie, jak działają mechanizmy. –
Tak, raz zepsułem się, gdy zadałem pytanie dotyczące Firefoksa i ktoś, kto rzeczywiście jest w zespole programistów Firefoksa, odpowiedział. :) – dlo