Как помочь отладчику увидеть мой javascript или как лучше изменить мой сценарий, чтобы сделать его более удобным для отладчика? - PullRequest
11 голосов
/ 28 октября 2009

У меня есть проект ASP.NET MVC, который использует некоторые простые функции AJAX с помощью метода jQuery $ .get, например:

$.get(myUrl, null, function(result) {
    $('#myselector').html(result);
});

Количество контента здесь относительно невелико - обычно это один div с короткой текстовой вставкой. Иногда, однако, я также добавляю некоторые javascript на страницу. В какой-то момент, когда я динамически включаю сценарий в контент, который сам был динамически добавлен на страницу, сценарий все еще выполняется, но он перестает быть доступным для отладчика. В VS2008 любые точки останова игнорируются, и когда я использую оператор «отладчик», я получаю окно сообщения о том, что «в этом месте нет исходного кода». Это терпит неудачу как для отладчика VS2008, так и для отладчика Firebug в Firefox. Я пытался как включить встроенный сценарий в динамическое содержимое, так и сослаться на отдельный файл js из этого динамического содержимого - оба пути, казалось, привели к созданию сценария, недоступного отладчику.

Итак, мой вопрос двоякий:

  • Есть ли способ помочь отладчику распознать существование этого скрипта?
  • Если нет, то как лучше всего включать сценарии, которые используются нечасто и в динамически генерируемом контенте так, чтобы они были доступны отладчикам?

Ответы [ 5 ]

1 голос
/ 26 января 2010

Это может быть далеко, но у меня нет доступа к IE сейчас, чтобы проверить. Попробуйте назвать анонимную функцию, например ::100100

$.get(myUrl, null, function anon_temp1(result) {
    $('#myselector').html(result);
});

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

1 голос
/ 28 октября 2009

Я пока не могу комментировать, но я могу помочь ответить. Как сказал qwerty, консоль Firefox может быть подходящим вариантом. Я бы порекомендовал пойти на полную планку и получить firebug. За три года работы я никогда не пропускал код.

Вы также можете изменить способ добавления внедренного javascript и посмотреть, влияет ли это на используемый вами отладчик. (Я так понимаю, вы используете Microsoft IDE?). В любом случае, я считаю, что лучший способ внедрить javascript для IE - это поместить его в виде appendChild в голову. В случае, если это не жизнеспособно, можно использовать функцию eval (я ненавижу использовать ее столько же, сколько и вы). Вот мой код исправления AJAX IE, который я использую. Я использую его и для сафари, так как у него похожее поведение. Если вам это тоже нужно, просто измените проверку состояния браузера (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, я предпочел прототип, а не додзё, но ... я так понимаю, это будет выглядеть примерно так:

$.get(myUrl, null, function(result) {
    $('#myselector').html(result);
    execajaxscripts(result);
});

Единственная проблема заключается в том, что ошибки отладки eval не могут быть обнаружены, поскольку это создает другой экземпляр интерпретатора. Но стоит попробовать .. а иначе. Используйте другой отладчик: D

0 голосов
/ 15 сентября 2011

Если вы добавите // @ sourceURL=foo.js в конец сценария, который вы вводите, он должен появиться в списке сценариев в Firebug и инспекторе webkit.

jQuery может быть исправлен, чтобы сделать это автоматически, но билет был отклонен.

Вот связанный вопрос: Возможно ли отладить динамическую загрузку JavaScript с помощью некоторого отладчика, такого как WebKit, FireBug или IE8 Developer Tool?

0 голосов
/ 29 января 2010

Мы используем firebug для отладки javascript, профильных запросов, журналов бросков и т. Д. Вы можете скачать с http://getfirebug.com/

Если firebug не показывает ваш исходный код javascript, опубликуйте URL-адрес, чтобы проверить пример.

Надеюсь, я вам помог!

0 голосов
/ 26 января 2010

Если это javascript, встроенный в динамически генерируемый HTML, я вижу, где это может быть проблемой, так как отладчик не увидит его при начальной загрузке. Я удивлен, что вы можете поместить его в отдельный файл .js, и отладчик все еще не может увидеть функцию.

Кажется, вы можете определить функцию в отдельном статическом файле, номинально "get_and_show" (или что-то еще, возможно, вложенное в своего рода пространство имен) с параметром myUrl, а затем вызвать функцию из HTML. Почему это не отключит точку останова (пробовали ли вы что-то подобное - вопрос неясен, была ли ссылка на .js в динамическом HTML просто вызовом func, или же действительной ссылкой на скрипт / загрузку) ? Обязательно сначала загрузить внешний файл сценария из «жестко запрограммированной» ссылки в файле HTML? (просмотреть исходный код на roboprogs.com/index.html - загружает файлы .js, затем запускает функцию вставки текста)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...