2013-03-29 7 views
3

Я пропустил какой-то код JavaScript (в данном случае, библиотеку AJAX прототипа), чтобы заглянуть в responseText. Я прочитал, что в Firebug и IE Developer Tools вы можете изменять переменные в пределах любой локальной области, находящейся в точке останова.Изменение переменных локальной области видимости в отладчиках

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

Для иллюстрации:

Debugging Ajax responses

Я хочу, чтобы изменить значение Мелированных свойств.

Но изменения не отражаются. Фактически, никаких изменений свойств не отражается во всем транспортном объекте.

Почему я даже пытаюсь это сделать? Ну, есть фрагмент JavaScript в этом responseText, который запускается методом evalScripts() прототипа, и в нем может быть синтаксическая ошибка. Это заставляет Magento получить «белый экран смерти» в форме редактирования категории. Я нашел синтаксическую ошибку в JavaScript и исправил ее в среде разработки. Но я также хотел дважды проверить это исправление в моей промежуточной среде (на которой у меня нет доступа на запись). Поэтому я думаю, что перехватить responseText на запросе страницы клиентской стороны промежуточной среды, изменить ее, чтобы исправить ошибки JS, и позволить ей пройти, чтобы доказать мою ошибку.

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

Надеюсь, я спросил это четко. Любая помощь будет оценена по достоинству. Благодаря!

UPDATE (хром): я подумал, что стоит отметить, что Chrome уже поздно поддерживает эту функцию на всех, но недавние (Mar 21) разработки ведутся, согласно этой статье:

https://code.google.com/p/v8/issues/detail?id=212

В плакате этой проблемы объясняются некоторые из основных компонентов механизма отладки, о которых я не знал. Очень проницательный. Не отвечает на мой вопрос, но по-прежнему относится к этой теме.

ответ

0

Объект responseText доступен только для чтения! Вы обнаружите, что ни отладчики, ни какой-либо JS-оператор или выражение не могут изменять свойство. Вам нужно будет назначить его другой локальной переменной или свойства, прежде чем вы сможете ее изменить. Я подстроил для вас a demonstration. Вы видите свойство только для чтения определенных свойств определенных встроенных объектов, из которых XMLHttpRequest - один. Это не проблема с отладкой или проверкой сред, а особенностью самой языковой среды.

Обратите внимание, что, хотя встроенные объекты браузера могут быть доступны только для чтения, сложнее установить собственные объекты только для чтения. Метод Object.freezeexists in ES5, но не поддерживается во всех браузерах (и несет в себе штраф за производительность в V8 на момент написания этой статьи).

+0

Фантастический ответ! Спасибо за такую ​​точную информацию. –

Смежные вопросы