Come impedire a Chrome di aggiornare la pagina durante la visualizzazione della fonte?


20

Quando si visualizza l'origine della pagina in Google Chrome, il browser apre una nuova scheda e sostanzialmente incolla l'URL con il view-source:prefisso. Questo è indesiderabile.

Come sviluppatore, posso includere alcuni output diagnostici che sono visibili nella fonte solo dopo aver inviato un modulo. Quando Chrome aggiorna la pagina per visualizzare l'origine, questa informazione scompare.

Esiste un modo per prevenire questo comportamento?

Nota: ho familiarità con l'opzione "Ispeziona elemento". Questo non è solo uno stand-in adeguato per visualizzare l'origine della pagina non elaborata della pagina esatta che stai visualizzando.


Una breve sceneggiatura di prova

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

Dopo aver fatto clic sul pulsante Invia, la pagina mostra

Array
(
    [foo] => bar
)

Se si visualizza l'origine della pagina, verrà visualizzato un output vuoto $_POST

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

Aggiornare

Apparentemente questo bug è già stato inviato. Sospiro...

Se qualcuno sa di un buon lavoro in giro, lo apprezzerei molto.


Le persone lì non capiscono che la fonte non è tenuta in memoria (a causa del minimalismo) ma manipolata. Dovresti vedere il commento code.google.com/p/chromium/issues/detail?id=523#c47 poiché anche questa sembra una bella idea ...
Tamara Wijsman,

Risposte:


12

Dalla pagina di segnalazione dei bug, la soluzione alternativa menzionata nel commento 12 funziona: In Strumenti per gli sviluppatori, abilita il monitoraggio delle risorse. (Se era disattivato, abilitandolo reinvia la richiesta che ha generato la pagina attualmente visibile, POST o GET.) Nell'elenco delle risorse, è possibile fare clic sulla pagina principale per vedere il codice sorgente come è stato restituito da per entrambe le richieste POST e GET.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Maggiori informazioni

Ho eseguito alcuni test utilizzando un semplice file php che mostrava il metodo di richiesta utilizzato e un valore POST, un registro del server proxy per vedere quali richieste stava facendo Chrome e il chrome://net-internals/view-cache/prefisso per vedere quale Chrome stava memorizzando nella cache.

Quando si utilizza il comando Visualizza sorgente, Chrome mostra l'origine della versione cache della pagina e memorizza nella cache solo le pagine richieste tramite il metodo GET.

Se stai guardando una pagina che hai precedentemente richiesto utilizzando GET e POST, solo la versione GET viene memorizzata nella cache. L'uso del comando Visualizza sorgente non richiederà nuovamente la pagina, ma mostrerà la versione GET memorizzata nella cache, se non la versione POST attualmente visibile.

Se stai guardando una pagina che hai richiesto solo utilizzando il metodo POST, l'utilizzo del comando Visualizza sorgente farà sì che Chrome guardi nella sua cache, non trovi nulla, richieda la pagina usando GET, la memorizzi nella cache e mostri la fonte di quella.


Bella scoperta!
Tamara Wijsman,

1
Chrome è cambiato molto da questa risposta, ma è sostanzialmente la stessa: apri gli strumenti di sviluppo, assicurati che il traffico di rete sia registrato e trova la richiesta che è stata registrata nella scheda Rete. Nel caso di richieste reindirizzate è possibile selezionare "Conserva registro" o "Registro precedente alla navigazione" per non cancellare il registro con ogni nuova richiesta di sincronizzazione.
Jon z il

1
@Jonz dopo aver realizzato questa follia non sto già apprezzando Google Chrome. Ad esempio, dovevo controllare l'origine della pagina della pagina di ringraziamento del sito Web di e-commerce (pagina caricata dopo che l'utente ha effettuato un pagamento con esito positivo, per verificare l'attivazione del codice GTM). Ora al caricamento della pagina, ho semplicemente disinserito la sessione necessaria e di nuovo al ricaricamento se la sessione non viene trovata, reindirizzo l'utente alla home page. Quindi, se provo a utilizzare l'hack di Google Chrome, non sono mai in grado di visualizzare l'origine della pagina, perché può solo inviare nuovamente la richiesta GET e POST, ma non può ripristinare la sessione. Quindi suggerireiuse "Inspect Element"
Abhishek Madhani,

1
@AbhishekMadhani Non sono sicuro che avresti voluto rispondermi, ma ripeterò quello che ho scritto in un commento qui sotto - sembra che, a partire da Chrome Canary 37, una nuova richiesta di rete non venga inviata quando visualizzi la fonte .
Jon z,

2

Bella domanda - e in qualche modo deludente leggere tutti quei commenti "questo è sbagliato" o "non funzionerà". Questo comportamento rende la funzione "Visualizza origine pagina" inutile per lo sviluppo in molti casi.

C'è un'estensione chiamata " Quick source viewer ", che sembra mostrare effettivamente l'origine della pagina attualmente caricata (non l'ho ancora testata con richieste POST).


0

Mi dispiace dirtelo, ma questo è contro la natura attuale della navigazione e del debug in un browser ...

La fonte originale non viene mantenuta in memoria, ma viene analizzata e trasformata in un albero di analisi il più velocemente possibile, questo per impedire l'uso inutile della memoria. Pertanto, qualsiasi informazione di debug nascosta nella fonte viene persa e deve essere esplicitamente richiesta. Nei cosiddetti siti Web 2.0, anche gli elementi cambiano e questa è la ragione per cui l'ispezione è così ...

Soluzione 1: Fiddler Web Debugger consente di ispezionare il traffico HTTP,
ciò consente di visualizzare le informazioni di debug dall'ultima richiesta.

Soluzione 2: incorporare le informazioni di debug o aggiungerle alla fine,
o magari mostrarle come pop-up o in un altro modo fantastico che non disturba il layout.


13
TomWij, "questo è contro l'attuale natura della navigazione e del debug in un browser ..." questo è semplicemente inaccurato. Le versioni correnti di Firefox e Safari si comportano entrambe come "previste". Infatti, poiché ho usato queste funzionalità in altri browser, sono arrivato ad aspettarle su Chrome. Mantenere in memoria un paio di KB di testo semplice per l'origine originale non dovrebbe essere difficile.
macek,

Google Chrome è noto per il suo minimalismo. ;-)
Tamara Wijsman il

3
Ciò è evidentemente falso. In Chrome puoi salvare l'origine originale della pagina (Salva pagina con nome) senza fare una seconda richiesta. Questo è ciò che dovrebbe essere visualizzato quando "Visualizza sorgente". L'attuale implementazione è altamente indesiderabile. Ad esempio quando si visualizza il risultato di un POST. Visualizza sorgente attualmente ottiene un GET nella stessa posizione, mostrando una pagina completamente diversa. Visualizza sorgente dovrebbe sempre mostrare lo stato della pagina alla richiesta corrente , NON una richiesta futura.
Chris,

6
Non c'è dubbio, ed è qui che dovrebbe leggere anche View Source. Una nuova richiesta è semplicemente fuorviante e sbagliata.
Chris,

2
@Jonz Stai discutendo di rimuovere del tutto la funzione Visualizza sorgente? Sosterrei questo se l'unica alternativa fosse l'attuale implementazione rotta. Ma perché non possiamo avere entrambi? Fare clic sui registri di rete nella barra degli strumenti di sviluppo è un'ottima opzione da avere quando hai bisogno di quel livello di informazioni, ma se vuoi solo vedere la fonte per la pagina corrente sembra eccessivo.
Chris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.