Wie kann ich verhindern, dass Chrome die Seite beim Anzeigen der Quelle aktualisiert?

20

Beim Anzeigen der Seitenquelle in Google Chrome öffnet der Browser einen neuen Tab und fügt die URL im Wesentlichen mit dem view-source:Präfix ein. Das ist unerwünscht.

Als Entwickler kann ich einige Diagnoseausgaben einfügen, die nur in der Quelle nach dem Absenden eines Formulars sichtbar sind. Wenn Chrome die Seite aktualisiert, um die Quelle anzuzeigen, werden diese Informationen ausgeblendet.

Gibt es sowieso, um dieses Verhalten zu verhindern?

Hinweis: Ich bin mit der Option "Inspect Element" vertraut. Dies ist jedoch kein ausreichender Ersatz für die Anzeige der Rohseitenquelle der genauen Seite, die Sie gerade anzeigen.


Ein schnelles Testskript

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

Nachdem Sie auf die Schaltfläche "Senden" geklickt haben, wird die Seite angezeigt

Array
(
    [foo] => bar
)

Wenn Sie die Seitenquelle anzeigen, wird eine leere $_POST Ausgabe angezeigt

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

Aktualisieren

Anscheinend wurde dieser Fehler bereits gemeldet. Seufzer...

Wenn jemand von einer guten Arbeit weiß, würde ich es sehr schätzen.

macek
quelle
Die Leute dort verstehen nicht, dass die Quelle nicht im Gedächtnis bleibt (aufgrund des Minimalismus), sondern manipuliert wird. Sie sollten den Kommentar code.google.com/p/chromium/issues/detail?id=523#c47 sehen, da dies ebenfalls eine gute Idee ist ...
Tamara Wijsman,

Antworten:

12

Auf der Seite mit dem Fehlerbericht funktioniert die in Kommentar 12 erwähnte Problemumgehung : Aktivieren Sie in den Entwicklertools die Ressourcenverfolgung. (Wenn diese Option deaktiviert ist, wird die Anforderung, die die aktuell sichtbare Seite generiert hat, entweder POST oder GET, erneut gesendet.) In der Liste der Ressourcen können Sie auf die Hauptseite klicken, um den Quellcode zu sehen, wie er vom Server zurückgegeben wurde für POST- und GET-Anforderungen.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Mehr Informationen

Ich habe einige Tests mit einer einfachen PHP-Datei durchgeführt, die die verwendete Anforderungsmethode und einen POST-Wert, ein Proxy-Server-Protokoll, um zu sehen, welche Anforderungen Chrome machte, und das chrome://net-internals/view-cache/Präfix, um zu sehen, was Chrome zwischengespeichert hat, zeigte.

Wenn Sie den Befehl "Quelltext anzeigen" verwenden , zeigt Chrome den Quelltext der zwischengespeicherten Version der Seite an und speichert nur die über die GET-Methode angeforderten Seiten zwischen.

Wenn Sie eine Seite aufrufen, die Sie zuvor mit GET und POST angefordert haben, wird nur die GET-Version zwischengespeichert. Wenn Sie den Befehl "Quelltext anzeigen" verwenden, wird die Seite nicht erneut angefordert, sondern die zwischengespeicherte GET-Version angezeigt, nicht die derzeit sichtbare POST-Version, falls vorhanden.

Wenn Sie eine Seite anzeigen, die Sie nur mit der POST-Methode angefordert haben, durchsucht Chrome mit dem Befehl „Quelltext anzeigen“ den Cache, sucht nach nichts, fordert die Seite mit GET an, speichert sie im Cache und zeigt den Quelltext an davon.

Bavi_H
quelle
Schöne Entdeckung!
Tamara Wijsman
1
Chrome hat sich seit dieser Antwort stark verändert, aber im Grunde ist es das Gleiche: Öffnen Sie die Entwicklungstools, stellen Sie sicher, dass der Netzwerkverkehr aufgezeichnet wird, und suchen Sie die Anforderung, die auf der Registerkarte "Netzwerk" protokolliert wurde. Bei umgeleiteten Anforderungen können Sie "Protokoll beibehalten" oder "Protokoll bei Navigation beibehalten" aktivieren, um das Protokoll nicht bei jeder neuen Synchronisierungsanforderung zu löschen.
Jon z
1
@ Jonz Nachdem ich diese Torheit bemerkt habe, mag ich Google Chrome bereits nicht. Zum Beispiel musste ich den Quellcode der Danke-Seite der E-Commerce-Website überprüfen (Seite wurde geladen, nachdem der Benutzer eine erfolgreiche Zahlung geleistet hat, um das Auslösen des GTM-Codes zu überprüfen). Jetzt beim Laden der Seite, ich einfach die erforderliche Sitzung und erneut beim Neuladen, wenn die Sitzung nicht gefunden wird, leite ich den Benutzer auf die Homepage um. Wenn ich also versuche, den Google Chrome-Hack zu verwenden, kann ich die Seitenquelle nie anzeigen, da nur die GET- und POST-Anforderung erneut gesendet werden kann, die Sitzung jedoch nicht zurückgesetzt werden kann. Daher würde ich vorschlagenuse "Inspect Element"
Abhishek Madhani
1
@AbhishekMadhani Ich bin nicht sicher , dass Sie mir antworten gemeint, aber ich werde wiederholen , was ich in einem Kommentar schrieb unten - es scheint , dass, wie von Chrome Canary 37, eine neue Netzwerkanforderung wird nicht gesendet , wenn Sie die Quelle anzeigen .
Jon z
2

Gute Frage - und etwas enttäuschend, all die Kommentare zu lesen, "das ist falsch" oder "das wird nicht funktionieren". Dieses Verhalten macht die Funktion "Seitenquelle anzeigen" in vielen Fällen für die Entwicklung unbrauchbar.

Es gibt eine Erweiterung namens " Quick Source Viewer ", die die Quelle der aktuell geladenen Seite anzeigt (ich habe sie jedoch nicht mit POST-Anfragen getestet).

basic6
quelle
0

Es tut mir leid, es Ihnen zu sagen, aber dies widerspricht der aktuellen Art des Browsens und Debuggens in einem Browser ...

Die ursprüngliche Quelle wird nicht gespeichert, sondern so schnell wie möglich analysiert und in einen Analysebaum umgewandelt, um unnötige Speichernutzung zu vermeiden. Daher gehen alle Debugging-Informationen, die Sie in der Quelle verbergen, verloren und müssen explizit angefordert werden. Auf den sogenannten Web 2.0-Sites ändern sich auch die Elemente, und aus diesem Grund ist die Überprüfung so ...

Lösung 1: Mit Fiddler Web Debugger können Sie den HTTP-Datenverkehr überprüfen und
die Debug-Informationen Ihrer letzten Anforderung anzeigen.

Lösung 2: Betten Sie Ihre Debugging-Informationen ein oder hängen Sie sie am Ende an,
oder zeigen Sie sie möglicherweise als Popup oder auf eine andere tolle Weise an, die Ihr Layout nicht stört.

Tamara Wijsman
quelle
13
TomWij, "das ist gegen die derzeitige Art des Browsens und Debuggens in einem Browser ..." das ist einfach nur ungenau. Aktuelle Versionen von Firefox und Safari verhalten sich beide wie "erwartet". In der Tat, weil ich diese Funktionen in anderen Browsern verwendet habe, habe ich sie in Chrome erwartet. Es sollte keine Schwierigkeit sein, ein paar KB Klartext für die ursprüngliche Quelle zu speichern.
macek
Google Chrome ist bekannt für seinen Minimalismus. ;-)
Tamara Wijsman
3
Dies ist nachweislich falsch. In Chrome können Sie die ursprüngliche Quelle der Seite (Seite speichern unter) speichern, ohne eine zweite Anfrage zu stellen. Dies ist, was angezeigt werden soll, wenn ich "Quelltext anzeigen". Die derzeitige Implementierung ist höchst unerwünscht. Zum Beispiel beim Anzeigen des Ergebnisses eines POST. View Source führt derzeit einen GET-Vorgang am selben Ort durch und zeigt eine völlig andere Seite an. Quelltext anzeigen sollte immer den Status der Seite bei der aktuellen Anforderung und NICHT bei einer zukünftigen Anforderung anzeigen.
Chris
6
Kein Zweifel, und von dort sollte View Source auch lesen. Eine neue Anfrage ist einfach irreführend und falsch.
Chris
2
@ Jonz Streiten Sie, die View Source-Funktion ganz zu entfernen? Ich würde dies unterstützen, wenn die einzige Alternative die derzeit fehlerhafte Implementierung ist. Aber warum können wir nicht beide haben? Das Klicken durch die Netzwerkprotokolle in der Entwickler-Symbolleiste ist eine großartige Option, wenn Sie diese Informationsebene benötigen. Wenn Sie jedoch nur die Quelle für die aktuelle Seite anzeigen möchten, scheint dies zu viel zu sein.
Chris