#javascript #google-chrome
#javascript #google-chrome
Вопрос:
Предположим, у меня есть следующий код внутри веб-страницы:
(function() {
var foo = 0;
function bar() {
foo = 1;
}
bar();
})();
Как я могу проверить значение переменной foo
и / или вызвать функцию bar
из консоли через некоторое время после загрузки страницы.
Я использую Google Chrome и не могу редактировать исходный код.
Комментарии:
1. почему бы не вернуть функцию
bar
и не поместить журналfoo
в тело ее функции?2. @zb22 предположим, что я отлаживаю страницу, которую я не контролирую, поэтому я не могу редактировать код. Если бы я мог использовать инструменты разработчика Chrome для перезаписи кода, это было бы приемлемо.
3. Если вы видите это, вы можете отредактировать его (и / или поставить в нем точку останова). Я ошибаюсь?!?
Ответ №1:
в Chrome есть инструмент разработки, который вы можете использовать, просто поместите разрыв внутри внутреннего замыкания, а затем протестируйте свои переменные в консоли. консоль зависит от состояния вашего кода, если вы остановитесь в определенной точке, некоторые переменные / функции будут определены / не определены до этой точки .
на вашем примере:
(function() {
var foo = 0;
function bar() {
foo = 1;
//make the break here
}
})();
вы не можете редактировать исходный js-код страницы, это сделает каждую веб-страницу открытой для взлома…
Комментарии:
1. Но я не знаю, будет ли вызван / когда
bar
!
Ответ №2:
Я хотел иметь возможность проверять переменные по требованию, поэтому установка точек останова во всех возможных местах, которые изменяют переменные, была непрактичной.
Мое решение состояло в том, чтобы поместить функцию внутри замыкания, к которой можно было получить доступ по всему миру. Это может быть сделано следующим образом:
- Установите точку останова внутри замыкания. При необходимости перезагрузите страницу.
- Когда отладчик приостановлен внутри замыкания, введите следующий код в консоли:
window.baz = function() {
// debugger;
bar();
console.log(foo);
}
Теперь вы можете вызывать функцию внутри консоли в любое время, и она должна иметь доступ к переменным, определенным в закрытии.