Comment empêcher Google Chrome d'actualiser la page lors de l'affichage du code source?

20

Lors de l'affichage du code source de la page dans Google Chrome, le navigateur ouvre un nouvel onglet et colle essentiellement l'URL avec le view-source:préfixe. Ceci n'est pas souhaitable.

En tant que développeur, je peux inclure des résultats de diagnostic qui ne sont visibles dans le code source qu'après la soumission d'un formulaire. Lorsque Chrome actualise la page pour afficher la source, cette information disparaît.

Est-il possible d'empêcher ce comportement?

Remarque: je connais l'option "Inspecter l'élément". Ce n’est tout simplement pas un substitut adéquat pour afficher la source de page brute de la page exacte que vous consultez.


Un script de test rapide

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

Après avoir cliqué sur le bouton d'envoi, la page affiche

Array
(
    [foo] => bar
)

Si vous affichez le source de la page, vous verrez une sortie vide $_POST .

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

Mise à jour

Apparemment, ce bogue a déjà été soumis. Soupir...

Si quelqu'un connaissait un bon travail, je l'apprécierais beaucoup.

Macek
la source
Les gens là-bas ne comprennent pas que la source n'est pas gardée en mémoire (à cause du minimalisme) mais manipulée. Vous devriez voir le commentaire code.google.com/p/chromium/issues/detail?id=523#c47 car cela semble une bonne idée aussi ...
Tamara Wijsman

Réponses:

12

À partir de la page de rapport de bogue, la solution de contournement mentionnée dans le commentaire 12 fonctionne: Dans les outils pour les développeurs, activez le suivi des ressources. (Si cette option était désactivée, son activation renverrait la demande qui générait la page actuellement visible, POST ou GET.) Dans la liste des ressources, vous pouvez cliquer sur la page principale pour voir le code source tel qu'il a été renvoyé par le serveur. pour les demandes POST et GET.

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Plus d'information

J'ai effectué quelques tests en utilisant un simple fichier php indiquant la méthode de requête utilisée et une valeur POSTed, un journal du serveur proxy pour déterminer les requêtes effectuées par Chrome et le chrome://net-internals/view-cache/préfixe permettant de déterminer le cache mis par Chrome.

Lorsque vous utilisez la commande Afficher la source, Chrome affiche la source de la version mise en cache de la page et met uniquement en cache les pages demandées via la méthode GET.

Si vous consultez une page que vous avez précédemment demandée avec GET et POST, seule la version de GET est mise en cache. L'utilisation de la commande Afficher la source ne redemandera pas la page, mais affichera la version GET mise en cache, pas la version POST actuellement visible, le cas échéant.

Si vous consultez une page pour laquelle vous avez uniquement demandé à l'aide de la méthode POST, l'utilisation de la commande Afficher la source permet à Chrome de rechercher dans son cache, de ne rien trouver, de demander la page à l'aide de GET, de la mettre en cache et d'afficher la source. de ça.

Bavi_H
la source
Belle découverte!
Tamara Wijsman
1
Chrome a beaucoup changé depuis cette réponse, mais il est fondamentalement identique: ouvrez les outils de développement, assurez-vous que le trafic réseau est enregistré et recherchez la demande qui a été enregistrée dans l'onglet Réseau. Dans le cas de demandes redirigées, vous pouvez cocher "Conserver le journal" ou "anticiper le journal lors de la navigation" pour ne pas effacer le journal à chaque nouvelle demande de synchronisation.
Jon z
1
@Jonz après avoir réalisé cette folie, je n'aime pas Google Chrome. Par exemple, j’avais besoin de vérifier la page source de la page de remerciement du site Web de commerce électronique (page chargée après que l’utilisateur a effectué son paiement, pour vérifier le déclenchement du code GTM). Maintenant, au chargement de la page, je désactive simplement la session nécessaire et à nouveau lors du rechargement si la session n’est pas trouvée, je redirige l’utilisateur vers la page d’accueil. Donc, si j'essaie d'utiliser Google Chrome, je ne pourrai jamais afficher le code source de la page, car il ne peut que renvoyer les demandes GET et POST, mais il ne peut pas réinitialiser la session. Par conséquent, je suggèreuse "Inspect Element"
Abhishek Madhani
1
@AbhishekMadhani Je ne suis pas sûr que vous vouliez me répondre, mais je vais répéter ce que j'ai écrit dans un commentaire ci-dessous: il semble qu'à partir de Chrome Canary 37, une nouvelle demande de réseau ne soit pas envoyée lorsque vous affichez le code source. .
Jon z
2

Bonne question - et un peu décevant de lire tous ces commentaires "ceci est faux" ou "cela ne fonctionnera pas". Ce comportement rend la fonctionnalité "Afficher la source de la page" inutilisable pour le développement dans de nombreux cas.

Il existe une extension appelée " Visualiseur de source rapide ", qui semble montrer la source de la page actuellement chargée (je ne l’ai pas encore testée avec les requêtes POST).

basic6
la source
0

Je suis désolé de vous le dire, mais cela va à l'encontre de la nature actuelle de la navigation et du débogage dans un navigateur ...

La source d'origine n'est pas conservée en mémoire, elle est analysée et transformée en un arbre d'analyse aussi rapidement que possible, ceci afin d'éviter toute utilisation inutile de la mémoire. Ainsi, toute information de débogage que vous cachez dans la source est perdue et doit être explicitement demandée. Dans les sites dits Web 2.0, les éléments changent également et c'est la raison pour laquelle l'inspection est comme ça ...

Solution 1: Le débogueur Web Fiddler vous permet d'inspecter le trafic HTTP,
ainsi que de voir les informations de débogage de votre dernière requête.

Solution 2: intégrez vos informations de débogage ou ajoutez-les à la fin,
ou montrez-les sous la forme d'une fenêtre contextuelle ou d'une autre manière impressionnante qui ne perturbera pas votre mise en page.

Tamara Wijsman
la source
13
TomWij, "cela va à l'encontre de la nature actuelle de la navigation et du débogage dans un navigateur ...", c'est tout simplement inexact. Les versions actuelles de Firefox et Safari se comportent toutes les deux comme "prévues". En fait, comme j'ai utilisé ces fonctionnalités dans d'autres navigateurs, je les ai attendues dans Chrome. Garder quelques Ko de texte brut pour la source originale en mémoire ne devrait pas poser de problème.
macek
Google Chrome est connu pour son minimalisme. ;-)
Tamara Wijsman
3
Ceci est manifestement faux. Dans Chrome, vous pouvez enregistrer la source d'origine de la page (Enregistrer la page sous) sans effectuer une seconde demande. C'est ce qui doit être affiché lorsque je "View Source". La mise en œuvre actuelle est hautement indésirable. Par exemple, lors de l'affichage du résultat d'un test POST. View Source effectue actuellement une opération GET au même endroit, en affichant une page entièrement différente. L'option Afficher la source doit toujours indiquer l'état de la page à la demande actuelle , PAS une demande future.
Chris
6
Sans aucun doute, et c'est là que View Source devrait également lire. Une nouvelle demande est simplement trompeuse et erronée.
Chris
2
@Jonz Êtes-vous en train de demander la suppression de la fonction View Source? J'appuierais cela si la seule alternative est l'implémentation actuelle brisée. Mais pourquoi ne pouvons-nous pas avoir les deux? Cliquer sur les journaux de réseau dans la barre d'outils de développement est une excellente option lorsque vous avez besoin de ce niveau d'informations, mais si vous souhaitez simplement voir le source de la page en cours, cela semble excessif.
Chris