Как помочь отладчику увидеть мой javascript или как лучше всего реорганизовать мой script, чтобы сделать его удобным для отладчика?
У меня есть проект ASP.NET MVC, который использует некоторые простые функции AJAX с помощью метода jQuery $.get, например:
$.get(myUrl, null, function(result) {
$('#myselector').html(result);
});
Количество контента здесь относительно невелико - обычно один div с коротким текстом. Иногда, однако, я также вводя некоторые javascript на страницу. В какой-то момент, когда я динамически включаю script в контент, который сам динамически добавляется на страницу, script все еще работает, но он перестает быть доступным для отладчика. В VS2008 любые точки останова игнорируются, и когда я использую оператор "отладчик", я получаю сообщение с сообщением о том, что "нет исходного кода в этом месте". Это не работает как для отладчика VS2008, так и для отладчика Firebug в Firefox. Я попытался включить в мой динамический контент script inline, а также ссылаюсь на отдельный файл js из этого динамического содержимого - оба пути, как представляется, приводят к script, недоступным для отладчика.
Итак, мой вопрос двоякий:
- Есть ли способ помочь отладчику распознать существование этого script?
- Если нет, то какой лучший способ включить скрипты, которые используются нечасто и в динамически сгенерированном контенте способом, доступным для отладчиков?
Ответы
Ответ 1
Я еще не могу прокомментировать, но я могу ответить. Как сказал qwerty, консоль firefox может быть способ пойти. Я бы порекомендовал идти полным баром и получить firebug. Он не пропустил код за 3 года, используя его.
Вы также можете изменить способ добавления введенного javascript и посмотреть, влияет ли это на отладчик, который вы используете. (Я полагаю, вы используете Microsoft IDE?).
В любом случае, я считаю, что лучший способ вставить javascript для IE - это добавить его как appendChild в голову. В случае, когда это не является жизнеспособным, можно использовать функцию eval (я ненавижу использовать ее столько, сколько вы). Вот мой код исправления IE AJAX, который я использую. Я использую его для сафари, так как он имеет подобное поведение. Если вам это нужно, просто измените проверку состояния браузера (document.all для IE, Safari - navigator.userAgent.toLowerCase() == 'safari';).
function execajaxscripts(obj){
if(document.all){
var scripts = obj.getElementsByTagName('script');
for(var i=0; i<scripts.length; i++){
eval(scripts[i].innerHTML);
}
}
}
Я никогда не использовал jquery, я предпочитал прототип, тогда dojo, но... Я так понимаю, что он выглядит примерно так:
$.get(myUrl, null, function(result) {
$('#myselector').html(result);
execajaxscripts(result);
});
Одна проблема заключается в том, что ошибки отладки eval не могут быть пойманы, так как она создает другой экземпляр интерпретатора. Но стоит попробовать.. и иначе. Используйте другой отладчик: D
Ответ 2
Это может быть длинный, но у меня нет доступа к IE сейчас, чтобы проверить.
Попробуйте назвать анонимную функцию, например:
$.get(myUrl, null, function anon_temp1(result) {
$('#myselector').html(result);
});
Я удивлен, что firebug не улавливает утверждение 'debugger'. У меня никогда не было никаких проблем, независимо от того, насколько сложным был JS, включая метод
Ответ 3
Если это javascript, встроенный в динамически сгенерированный HTML, я вижу, где это может быть проблемой, поскольку отладчик не увидит его в начальной загрузке. Я удивлен, что вы можете поместить его в отдельный файл .js, и отладчик все еще не смог увидеть эту функцию.
Кажется, вы могли бы определить функцию в отдельном статическом файле, номинально "get_and_show" (или что-то еще, возможно, вложенное в пространство имен сортировки) с параметром myUrl, а затем вызывать функцию из HTML. Почему эта поездка не остановится (вы попробовали что-то вроде этого - вопрос неясен в отношении того, является ли ссылка на .js в динамическом HTML просто вызовом func или фактической ссылкой script/load как Что ж)? Не забудьте сначала загрузить внешний файл script из "жестко закодированной" ссылки в HTML файле? (просмотреть источник на roboprogs.com/index.html - загружает файлы .js, затем запускает функцию вставки текста)
Ответ 4
Мы используем firebug для отладки javascript, запросов профиля, бросков и т.д.
Вы можете скачать с http://getfirebug.com/
Если firebug не показывает ваш источник javascript, отправьте URL-адрес, чтобы проверить ваш пример.
Надеюсь, я помог!
Ответ 5
Если вы добавите // @ sourceURL=foo.js
в конец script, который вы впрыскиваете, то он должен появиться в списке скриптов в firebug и инспекторе веб-кайт.
jQuery может быть исправлен, чтобы сделать это автоматически, но билет был отклонен.
Вот связанный с этим вопрос: Можно отлаживать динамическую загрузку JavaScript некоторыми отладчиками, такими как WebKit, FireBug или IE8 Developer Tool?