Jak zapobiec odświeżaniu strony przez Chrome podczas przeglądania źródła?

20

Podczas przeglądania źródła strony w Google Chrome przeglądarka otwiera nową kartę i w zasadzie wkleja adres URL z view-source:prefiksem. To jest niepożądane.

Jako programista mogę dołączyć wyniki diagnostyczne widoczne tylko w źródle po przesłaniu formularza. Gdy Chrome odświeża stronę, aby wyświetlić źródło, informacje te znikają.

Czy istnieje sposób, aby temu zapobiec?

Uwaga: znam opcję „Sprawdź element”. To po prostu nie jest odpowiedni stand-in do przeglądania źródła strony surowej strony, na którą patrzysz.


Szybki skrypt testowy

<pre>
  <?= print_r($_POST, true) ?>
</pre>
<form action="" method="post">
  <input id="foo" name="foo" value="bar" />
  <input type="submit" />
</form>

Po kliknięciu przycisku przesyłania strona wyświetla się

Array
(
    [foo] => bar
)

Jeśli wyświetlisz źródło strony, zobaczysz puste $_POST wyjście

<pre>
Array
(
)
</pre>
<form action="" method="post"> 
  <input id="foo" name="foo" value="bar" /> 
  <input type="submit" /> 
</form> 

Aktualizacja

Najwyraźniej ten błąd został już zgłoszony. Westchnienie...

Jeśli ktoś wie o dobrej pracy, byłbym bardzo wdzięczny.

macek
źródło
Ludzie tam nie rozumieją, że źródło nie jest przechowywane w pamięci (z powodu minimalizmu), ale manipulowane. Powinieneś zobaczyć komentarz code.google.com/p/chromium/issues/detail?id=523#c47, ponieważ wydaje się to również fajnym pomysłem ...
Tamara Wijsman,

Odpowiedzi:

12

Na stronie raportu o błędzie działa obejście wspomniane w komentarzu 12 : W Narzędziach programisty włącz Śledzenie zasobów. (Jeśli był wyłączony, włączenie go spowoduje ponowne przesłanie żądania, które wygenerowało aktualnie widoczną stronę, POST lub GET.) Na liście zasobów możesz kliknąć stronę główną, aby zobaczyć kod źródłowy, ponieważ został zwrócony przez podzielenie zarówno dla żądań POST, jak i GET.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Więcej informacji

Przeprowadziłem kilka testów przy użyciu prostego pliku php, który pokazał zastosowaną metodę żądania i wartość POSTed, dziennik serwera proxy, aby zobaczyć, które żądania Chrome wysyła, oraz chrome://net-internals/view-cache/prefiks, aby zobaczyć, co Chrome buforuje.

Gdy używasz polecenia Wyświetl źródło, Chrome pokazuje źródło swojej wersji strony w pamięci podręcznej i buforuje tylko strony żądane za pomocą metody GET.

Jeśli patrzysz na stronę, o którą wcześniej prosiłeś za pomocą GET i POST, tylko buforowana jest tylko wersja GET. Użycie polecenia Wyświetl źródło nie spowoduje ponownego żądania strony, ale wyświetli buforowaną wersję GET, a nie aktualnie widoczną wersję POST, jeśli taka istnieje.

Jeśli patrzysz na stronę, o którą poprosiłeś tylko przy użyciu metody POST, to użycie polecenia Wyświetl źródło spowoduje, że Chrome zajrzy do swojej pamięci podręcznej, niczego nie znajdzie, poprosi o stronę za pomocą GET, zapisz ją w pamięci podręcznej i pokaż źródło tego.

Bavi_H
źródło
Niezłe odkrycie!
Tamara Wijsman,
1
Chrome bardzo się zmienił od tej odpowiedzi, ale w zasadzie jest taki sam: otwórz narzędzia programistyczne, upewnij się, że ruch sieciowy jest rejestrowany i znajdź zgłoszenie zarejestrowane na karcie Sieć. W przypadku przekierowanych żądań możesz zaznaczyć „Zachowaj dziennik” lub „poprzedni dziennik podczas nawigacji”, aby nie kasować dziennika przy każdym nowym żądaniu synchronizacji.
Jon z
1
@Jonz po uświadomieniu sobie tego szaleństwa już nie lubię Google Chrome. Na przykład musiałem sprawdzić źródło strony z podziękowaniem w witrynie e-commerce (strona ładowana po dokonaniu przez użytkownika udanej płatności za sprawdzenie uruchomienia kodu GTM). Teraz po wczytaniu strony po prostu wyłączam niezbędną sesję i ponownie przy ponownym ładowaniu, jeśli sesja nie zostanie znaleziona, przekierowuję użytkownika na stronę główną. Więc jeśli spróbuję skorzystać z Google Chrome hack, nigdy nie będę w stanie wyświetlić źródła strony, ponieważ może on tylko ponownie wysłać żądanie GET i POST, ale nie może zresetować sesji. Dlatego sugerowałbymuse "Inspect Element"
Abhishek Madhani
1
@AbhishekMadhani Nie jestem pewien, czy chciałeś mi odpowiedzieć, ale powtórzę to, co napisałem w komentarzu poniżej - wydaje się, że od Chrome Canary 37 nowe żądanie sieciowe nie jest wysyłane, gdy przeglądasz źródło .
Jon z
2

Dobre pytanie - i nieco rozczarowujące do przeczytania wszystkich komentarzy „to źle” lub „to nie zadziała”. Takie zachowanie sprawia, że ​​funkcja „Wyświetl źródło strony” jest bezużyteczna w wielu przypadkach.

Istnieje rozszerzenie o nazwie „ Szybka przeglądarka źródeł ”, które wydaje się pokazywać źródło aktualnie wczytywanej strony (chociaż nie testowałem jej z żądaniami POST).

podstawowy 6
źródło
0

Przykro mi to mówić, ale jest to sprzeczne z obecnym charakterem przeglądania i debugowania w przeglądarce ...

Oryginalne źródło nie jest przechowywane w pamięci, ale jest parsowane i przekształcane w drzewo parsowania tak szybko, jak to możliwe, aby zapobiec niepotrzebnemu wykorzystaniu pamięci. W związku z tym wszelkie informacje debugowania ukryte w źródle zostaną utracone i należy je wyraźnie zażądać. W tak zwanych witrynach Web 2.0 elementy również się zmieniają i dlatego inspekcja jest taka ...

Rozwiązanie 1: Fiddler Web Debugger umożliwia kontrolę ruchu HTTP,
pozwala to zobaczyć informacje debugowania z ostatniego żądania.

Rozwiązanie 2: Osadź swoje informacje debugujące lub dołącz je na końcu,
a może pokaż jako wyskakujące okienko lub w inny niesamowity sposób, który nie zakłóci twojego układu.

Tamara Wijsman
źródło
13
TomWij, „jest to sprzeczne z obecnym charakterem przeglądania i debugowania w przeglądarce ...” jest to po prostu niedokładne. Obecne wersje przeglądarek Firefox i Safari zachowują się „zgodnie z oczekiwaniami”. Ponieważ korzystałem z tych funkcji w innych przeglądarkach, zacząłem ich oczekiwać w Chrome. Przechowywanie w pamięci kilku KB zwykłego tekstu dla oryginalnego źródła nie powinno stanowić problemu.
Macek
Google Chrome jest znany ze swojego minimalizmu. ;-)
Tamara Wijsman,
3
Jest to wyraźnie nieprawdziwe. W Chrome możesz zapisać oryginalne źródło strony (Zapisz stronę jako) bez ponownego żądania. To powinno być wyświetlane, gdy „Wyświetlam źródło”. Obecne wdrożenie jest wysoce niepożądane. Na przykład podczas przeglądania wyniku testu POST. Wyświetl źródło obecnie robi GET do tej samej lokalizacji, pokazując zupełnie inną stronę. Wyświetl źródło powinno zawsze pokazywać stan strony przy bieżącym żądaniu, NIE zaś przyszłe żądanie.
Chris
6
Bez wątpienia i właśnie z tego źródła należy czytać. Nowa prośba jest po prostu myląca i błędna.
Chris
2
@Jonz Czy kłócisz się, aby całkowicie usunąć funkcję Wyświetl źródło? Poparłbym to, jeśli jedyną alternatywą jest obecnie zepsuta implementacja. Ale dlaczego nie możemy mieć obu? Klikanie dzienników sieciowych na pasku narzędzi dewelopera jest świetną opcją, gdy potrzebujesz takiego poziomu informacji, ale jeśli chcesz tylko zobaczyć źródło bieżącej strony, wydaje się, że to przesada.
Chris