Подтвердить что ты не робот

Как помочь отладчику увидеть мой 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?
  • Если нет, то какой лучший способ включить скрипты, которые используются нечасто и в динамически сгенерированном контенте способом, доступным для отладчиков?
4b9b3361

Ответ 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?