Как кнопка просмотра исходного кода в IE7 взаимодействует с javascript?

Я отлаживаю чужой код для веб-страницы, созданной с помощью ASP.NET с некоторыми эффектами javascript. Это форма, которую мы предварительно заполняем редактируемыми данными, и одно из текстовых полей заполняется неправильным значением.

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

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

<input name="RecurrenceProperties$TextBox57" type="text" value="HEY ITS THE RIGHT VALUE" id="RecurrenceProperties_TextBox57" />

Но неправильное значение есть как в отображаемом html, так и в панели инструментов разработчика IE.

Это кажется адской подсказкой, но я недостаточно знаю о том, как работает «Просмотр исходного кода», чтобы сказать, что происходит за кулисами. Что происходит между генерацией источника «Просмотр исходного кода» и фактическим отображением страницы?

РЕДАКТИРОВАТЬ: я нашел, где что-то пошло не так, поставив точку останова везде, где идентификатор встречается в javascript (не совсем элегантно, но я нашел это).

Предложения по отключению javascript и использованию IE8 были очень полезными. Спасибо.


person Ryan    schedule 28.01.2009    source источник


Ответы (4)


Если вы хотите увидеть, какое влияние JavaScript оказывает на вашу страницу, используйте IE8 или FireFox/Firebug на странице, чтобы увидеть, что он (не) делает.

Также они дадут вам информацию по стилю Css, если на самом деле дело в том, что отображается не тот элемент, а правильный скрыт.

person StingyJack    schedule 28.01.2009

То, что вы видите с «просмотром исходного кода», — это необработанный HTML-код, который был получен. HTML не содержит никаких изменений, сделанных с помощью DHTML/JavaScript.


Обновлять

Вдохновленный комментарием Маника, вот кроссбраузерный букмарклет1 для отображения того, что рендерится внутри <body>:

javascript:"<pre>"+document.body.innerHTML.replace(/([&<>])/g,function(c){return"&"+{"&":"amp","<":"lt",">":"gt"}[c]+";";})+"</pre>"

1 Однако в Safari это не работает. Кто-нибудь знает, почему?

person Ates Goral    schedule 28.01.2009
comment
Ага, и если вы хотите увидеть обработанный исходный код, создайте закладку с этим URL-адресом: javascript:'‹xmp›'%20+%20window.document.body.outerHTML+%20'‹/xmp›' - person Manik; 28.01.2009
comment
@Маник: хорошо! Обратите внимание, что ‹xmp› устарел и вместо него следует использовать ‹pre› (после экранирования символов HTML). - person Ates Goral; 29.01.2009
comment
@Manik: Также externalHTML не является стандартным. Нам придется обойтись внутренним HTML и просто посмотреть, что внутри ‹body›... - person Ates Goral; 29.01.2009

Как уже упоминалось, «Просмотр исходного кода» будет отображать HTML, отправленный сервером, изменения, сделанные с помощью JavaScript, не будут отражены в «Просмотр исходного кода».

Я бы посоветовал поискать любой код JavaScript, который может изменять значение текстового поля «RecurrenceProperties_TextBox57». Проверьте <script type="text/javascript"></script> области исходного кода на наличие любого кода, который ссылается на текстовое поле.

person Phaedrus    schedule 28.01.2009

Если это я, первое, что я бы сделал, это отключил javascript и загрузил страницу. Это очень быстро сузит область, в которой возникает ваша ошибка, особенно если вы подозреваете, что виноват javascript.

Что касается того, что делает источник представления, он показывает вам, что интерпретирует браузер... код, который был отправлен с сервера. Ни один из этих кодов не выполняется в исходном коде представления.

person Pete H.    schedule 28.01.2009