Как запретить Chrome обновлять страницу при просмотре исходного кода?

20

При просмотре источника страницы в Google Chrome браузер открывает новую вкладку и в основном вставляет URL-адрес с view-source:префиксом. Это нежелательно.

Как разработчик, я могу включить некоторые диагностические данные, которые видны в источнике только после отправки формы. Когда Chrome обновляет страницу для просмотра источника, эта информация исчезает.

Есть ли способ предотвратить такое поведение?

Примечание: я знаком с опцией «Проверка элемента». Это просто не адекватная замена для просмотра исходного текста той страницы, которую вы просматриваете.


Скрипт быстрого теста

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

После нажатия кнопки «Отправить» появится страница

Array
(
    [foo] => bar
)

Если вы просматриваете страницу источника, вы увидите пустой $_POST вывод

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

Обновить

Видимо эта ошибка уже была отправлена. Вздох...

Если кто-нибудь знает о хорошей работе вокруг, я был бы очень признателен.

Мацек
источник
Люди там не понимают, что источник не хранится в памяти (из-за минимализма), а манипулируется. Вы должны увидеть комментарий code.google.com/p/chromium/issues/detail?id=523#c47, поскольку это тоже кажется хорошей идеей ...
Тамара Вийсман

Ответы:

12

На странице отчета об ошибках работает обходной путь, упомянутый в комментарии 12 : В инструментах разработчика включите отслеживание ресурсов. (Если он был выключен, то при включении он повторно отправит запрос, который сгенерировал видимую в данный момент страницу, либо POST, либо GET.) В списке ресурсов вы можете щелкнуть главную страницу, чтобы увидеть исходный код в том виде, в котором он был возвращен сервером sever. для запросов POST и GET.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Дополнительная информация

Я провел несколько тестов, используя простой php-файл, который показал используемый метод запроса и значение POSTed, журнал прокси-сервера, чтобы увидеть, какие запросы делал Chrome, и chrome://net-internals/view-cache/префикс, чтобы увидеть, что Chrome кеширует.

Когда вы используете команду «Просмотр источника», Chrome показывает источник своей кэшированной версии страницы и кэширует только страницы, запрошенные с помощью метода GET.

Если вы просматриваете страницу, которую вы ранее запрашивали с помощью GET и POST, то кэшируется только версия GET. Использование команды View Source не будет повторно запрашивать страницу, но покажет кэшированную версию GET, а не текущую видимую версию POST, если таковая имеется.

Если вы просматриваете страницу, которую вы запросили только с помощью метода POST, то при использовании команды View Source Chrome будет искать в своем кеше, ничего не находить, запрашивать страницу с помощью GET, кэшировать ее и показывать источник того, что.

Bavi_H
источник
Хорошее открытие!
Тамара Вийсман
1
После этого ответа Chrome сильно изменился, но в основном он один и тот же: инструменты open dev гарантируют, что сетевой трафик регистрируется, и найдите запрос, который был зарегистрирован на вкладке Network. В случае перенаправленных запросов вы можете установить флажок «Сохранить журнал» или «Предварительный журнал при навигации», чтобы не удалять журнал при каждом новом запросе синхронизации.
Jon Z
1
@Jonz после осознания этой глупости мне уже не нравится Google Chrome. Например, мне нужно было проверить источник страницы страницы «Спасибо» на сайте электронной коммерции (страница, загруженная после того, как пользователь совершил успешный платеж, для проверки запуска кода GTM). Теперь при загрузке страницы я просто сбрасываю необходимый сеанс и снова при перезагрузке, если сеанс не найден, я перенаправляю пользователя на домашнюю страницу. Поэтому, если я попытаюсь использовать взлом Google Chrome, я никогда не смогу просмотреть исходный код страницы, поскольку он может только повторно отправить запрос GET и POST, но не может сбросить сеанс. Следовательно, я бы предложилuse "Inspect Element"
Абхишек Мадхани
1
@AbhishekMadhani Я не уверен, что вы хотели мне ответить, но я повторю то, что написал в комментарии ниже - похоже, что в Chrome Canary 37 новый сетевой запрос не отправляется при просмотре источника ,
Jon Z
2

Хороший вопрос - и несколько разочаровывающий читать все эти комментарии «это неправильно» или «это не сработает». Такое поведение делает функцию «Просмотр источника страницы» бесполезной для разработки во многих случаях.

Существует расширение под названием « Быстрый просмотр исходного кода », которое, по-видимому, фактически показывает источник загруженной в данный момент страницы (хотя я не проверял его с запросами POST).

basic6
источник
0

Извините, что говорю вам, но это противоречит текущей природе просмотра и отладки в браузере ...

Исходный источник не сохраняется в памяти, но анализируется и преобразовывается в дерево разбора как можно быстрее, чтобы предотвратить бесполезное использование памяти. Таким образом, любая отладочная информация, которую вы скрываете в источнике, теряется и должна быть явно запрошена. На так называемых сайтах Web 2.0 также меняются элементы, и именно поэтому проверка такова ...

Решение 1. Fiddler Web Debugger позволяет вам проверять HTTP-трафик,
это позволяет вам видеть отладочную информацию из вашего последнего запроса.

Решение 2. Вложите свою информацию отладки или добавьте ее в конце,
или, возможно, покажите ее как всплывающее окно или другим удивительным способом, который не нарушает вашу компоновку.

Тамара Вийсман
источник
13
TomWij, «это противоречит текущей природе просмотра и отладки в браузере ...», это просто неточно. Текущие версии Firefox и Safari ведут себя как «ожидаемые». Фактически, поскольку я использовал эти функции в других браузерах, я ожидал их в Chrome. Сохранение в памяти пары КБ простого текста для исходного источника не составит труда.
macek
Google Chrome известен своим минимализмом. ;-)
Тамара Вийсман
3
Это явно ложно. В Chrome вы можете сохранить исходный источник страницы (Сохранить страницу как) без выполнения второго запроса. Это то, что должно отображаться, когда я "Просмотр источника". Текущая реализация крайне нежелательна. Например, при просмотре результата POST. View source в настоящее время выполняет GET в том же месте, показывая совершенно другую страницу. Просмотр источника всегда должен показывать состояние страницы по текущему запросу, а НЕ по будущему запросу.
Крис
6
Без сомнения, именно здесь View Source следует читать. Новый запрос просто вводит в заблуждение и ошибочен.
Крис
2
@Jonz Вы вообще хотите удалить функцию просмотра исходного кода? Я бы поддержал это, если единственной альтернативой является текущая сломанная реализация. Но почему мы не можем иметь оба? Щелкнув по сетевым журналам на панели инструментов dev, вы можете выбрать нужный уровень информации, но если вы просто хотите увидеть источник для текущей страницы, это кажется излишним.
Крис