Кто меняет мой DOM?

Что может изменить DOM веб-страницы после того, как браузер получит ответ?

Я вижу это поведение в значении скрытого элемента ввода, который содержит одноразовый маркер формы.

Когда я "просматриваю источник" в браузере, я вижу правильное значение, записанное сервером. Когда я отправляю форму, просматриваю текущее состояние DOM или просто меняю элемент на текстовый ввод, я вижу другую строку. Таким образом, значение, которое вводит, когда пришло время отправить обратно на сервер, отличается от того, которое изначально отправлял сервер.

Проблема сохраняется с отключенным JavaScript. Добавление атрибута только для чтения к элементу также не помогло.

НОВАЯ ИНФОРМАЦИЯ: Я еще немного повозился с этим, и, поверьте или нет, отключение изображений в Firefox устранит эту проблему.

С какой стати это случилось?

4 ответа

Решение

Я был не прав в моей интерпретации происходящего. Я думаю, это хорошо, потому что то, что я думал, что видел, никогда не должно случиться! Во всяком случае, вот ситуация, как я теперь понимаю:

Маркер формы здесь одноразовый, поэтому он действителен только для загрузки одной страницы. Где-то еще на странице был тег img без атрибута src, который заставлял браузер пытаться загрузить изображение из /. Поскольку страница индекса является страницей php, токен был зациклен.

Я думаю, что DOM изменился, я думаю, потому что некоторые реализации 'view source' (я тестировал в нескольких браузерах), казалось, также вызывали перезагрузку страницы...

Спасибо за все предложения.

Если браузер имеет функции "сохранить данные формы", возможно, он предварительно заполняет данные ранее отправленным значением.

(Я ожидаю, что популярные браузеры достаточно умны, чтобы не заполнять скрытые поля, но это один из источников, который я могу предложить...)

Возможно, вам повезет, поместив readonly = "readonly" в тег field и autocomplete = "off".

Не уверен, что автозаполнение браузера будет делать это, но это правдоподобно, также можно попробовать отключить автозаполнение в ваших тестирующих браузерах и посмотреть, изменит ли это что-нибудь.

Что вы подразумеваете под "когда я отправляю форму, просматриваю текущее состояние DOM"?

Если вы отправляете форму, отправляет ли она запрос на сервер? Вы говорите о состоянии DOM на странице результатов, отправленной обратно сервером?

На самом деле не возможно, чтобы без участия сценариев на стороне клиента ваша DOM была изменена на стороне клиента.

Если, с другой стороны, вы отправляете на сервер и возвращаете совершенно новый DOM, тогда сервер изменил его.

Другие вопросы по тегам