javascript - 如何帮助调试器查看我的 javascript,或者如何最好地重构我的脚本以使其对调试器友好?

标签 javascript jquery debugging

我有一个 ASP.NET MVC 项目,它通过 jQuery 的 $.get 方法使用一些简单的 AJAX 功能,如下所示:

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

这里的内容量相对较少——通常是带有简短文本的单个 div。然而,有时我也会在页面中注入(inject)一些 javascript。在某些时候,当我将脚本动态包含到本身动态添加到页面的内容中时,脚本仍然运行,但它不再对调试器可用。在 VS2008 中,任何断点都会被忽略,当我使用“调试器”语句时,我会收到一个消息框,提示“此位置没有可用的源代码”。对于 VS2008 调试器和 Firefox 中的 Firebug 调试器,这都失败了。我已尝试在我的动态内容中包含内联脚本,并从该动态内容中引用一个单独的 js 文件——这两种方式似乎都会导致调试器无法使用脚本。

所以,我的问题是双重的:

  • 有什么方法可以帮助调试器识别这个脚本的存在吗?
  • 如果不是,以调试器可访问的方式将不常使用的脚本和动态生成的内容包含在其中的最佳方法是什么?

最佳答案

我还不能发表评论,但我也许可以帮忙回答。正如 qwerty 所说,firefox console 可以是要走的路。我建议您全力以赴并获得 Firebug 。在我使用它的 3 年里,它从未漏过任何代码。

您还可以更改添加注入(inject)的 javascript 的方式,看看这是否会影响您正在使用的调试器。 (我认为您使用的是 Microsoft 的 IDE?)。 无论如何,我发现为 IE 注入(inject) javascript 的最佳方法是将其作为 appendChild 放在头部。在不可行的情况下,可以使用 eval 函数(我和你一样讨厌使用它)。这是我使用的 AJAX IE 修复程序代码。我也将它用于 safari,因为它具有类似的行为。如果您也需要它,只需更改浏览器条件检查(IE 的 document.all,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,我更喜欢原型(prototype)然后是 dojo 但是......我认为它看起来像这样:

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

一个问题是,eval 调试错误可能不会被捕获,因为它创建了解释器的另一个实例。但值得尝试……否则。使用不同的调试器 :D

关于javascript - 如何帮助调试器查看我的 javascript,或者如何最好地重构我的脚本以使其对调试器友好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1633766/

相关文章:

javascript - 如何在 Angular UI Bootstrap Pagination 中生成链接

javascript - 使用javascript下载文件弹出框

javascript - 在 React Native 中按下时更改按钮样式

javascript - 在带有上下文的 jQuery 选择器中使用 $(this)

javascript - 这个 JavaScript 语法是什么意思?

javascript - 创建一个 javascript 函数来反转单词

javascript - 点击事件对象跟踪问题

javascript - jquery div 展开页面上的所有div

debugging - 为什么是:sprint always prints a "_"?

c# - Visual Studio 2010 测试未在异常时进入调试器