代码之家  ›  专栏  ›  技术社区  ›  Cédric Boivin

如何使用IE8调试Javascript

  •  63
  • Cédric Boivin  · 技术社区  · 15 年前

    更新到IE8后,与VisualStudio的JavaScript去bug不起作用。

    4 回复  |  直到 14 年前
        1
  •  81
  •   Michael Scheper    9 年前

    我今天发现,我们现在可以使用集成在IE8中的开发人员工具栏插件调试Javascript。

    • 工具 在工具栏上,选项卡右侧。
    • 选择 开发工具 . 开发者工具对话框应该打开。
    • 剧本 对话中的选项卡。
    • 开始调试

    您可以使用watch、breakpoint、see调用堆栈等,类似于专业浏览器中的调试器。

    您也可以使用该语句 debugger; 在JavaScript代码中,设置断点。

        2
  •  8
  •   Grant Wagner    15 年前

    有关IE8开发者工具栏调试的更多信息,请访问 Debugging JScript Debugging Script with the Developer Tools .

        3
  •  6
  •   Ro Marcus Westin    15 年前

    这不会帮助您单步执行代码或中断错误,但它是在所有浏览器上为您的项目获得相同调试控制台的一种有用方法。

    myLog = function() {
        if (!myLog._div) { myLog.createDiv(); }
    
        var logEntry = document.createElement('span');
        for (var i=0; i < arguments.length; i++) {
            logEntry.innerHTML += myLog.toJson(arguments[i]) + '<br />';
        }
        logEntry.innerHTML += '<br />';
    
        myLog._div.appendChild(logEntry);
    }
    myLog.createDiv = function() {
        myLog._div = document.body.appendChild(document.createElement('div'));
        var props = {
            position:'absolute', top:'10px', right:'10px', background:'#333', border:'5px solid #333', 
            color: 'white', width: '400px', height: '300px', overflow: 'auto', fontFamily: 'courier new',
            fontSize: '11px', whiteSpace: 'nowrap'
        }
        for (var key in props) { myLog._div.style[key] = props[key]; }
    }
    myLog.toJSON = function(obj) {
        if (typeof window.uneval == 'function') { return uneval(obj); }
        if (typeof obj == 'object') {
            if (!obj) { return 'null'; }
            var list = [];
            if (obj instanceof Array) {
                for (var i=0;i < obj.length;i++) { list.push(this.toJson(obj[i])); }
                return '[' + list.join(',') + ']';
            } else {
                for (var prop in obj) { list.push('"' + prop + '":' + this.toJson(obj[prop])); }
                return '{' + list.join(',') + '}';
            }
        } else if (typeof obj == 'string') {
            return '"' + obj.replace(/(["'])/g, '\\$1') + '"';
        } else {
            return new String(obj);
        }
    }
    
    myLog('log statement');
    myLog('logging an object', { name: 'Marcus', likes: 'js' });
    

    这是非常仓促地组合起来的,有点草率,但它仍然很有用,可以很容易地改进!

        4
  •  3
  •   poshaughnessy    14 年前

    我本想将此作为对马库斯·威斯汀回复的评论,但我找不到任何联系——也许我需要更多的声誉?


    无论如何,谢谢,我发现这个代码片段对IE中的快速调试很有用。我已经做了一些快速调整,以修复一个使它停止工作的问题,还可以自动向下滚动并使用固定定位,使它显示在视口中。以下是我的版本,以防有人发现它有用:

    myLog = function() {
    
        var _div = null;
    
        this.toJson = function(obj) {
    
            if (typeof window.uneval == 'function') { return uneval(obj); }
            if (typeof obj == 'object') {
                if (!obj) { return 'null'; }
                var list = [];
                if (obj instanceof Array) {
                        for (var i=0;i < obj.length;i++) { list.push(this.toJson(obj[i])); }
                        return '[' + list.join(',') + ']';
                } else {
                        for (var prop in obj) { list.push('"' + prop + '":' + this.toJson(obj[prop])); }
                        return '{' + list.join(',') + '}';
                }
            } else if (typeof obj == 'string') {
                return '"' + obj.replace(/(["'])/g, '\\$1') + '"';
            } else {
                return new String(obj);
            }
    
        };
    
        this.createDiv = function() {
    
            myLog._div = document.body.appendChild(document.createElement('div'));
    
            var props = {
                position:'fixed', top:'10px', right:'10px', background:'#333', border:'5px solid #333', 
                color: 'white', width: '400px', height: '300px', overflow: 'auto', fontFamily: 'courier new',
                fontSize: '11px', whiteSpace: 'nowrap'
            }
    
            for (var key in props) { myLog._div.style[key] = props[key]; }
    
        };
    
    
        if (!myLog._div) { this.createDiv(); }
    
        var logEntry = document.createElement('span');
    
        for (var i=0; i < arguments.length; i++) {
            logEntry.innerHTML += this.toJson(arguments[i]) + '<br />';
        }
    
        logEntry.innerHTML += '<br />';
    
        myLog._div.appendChild(logEntry);
    
        // Scroll automatically to the bottom
        myLog._div.scrollTop = myLog._div.scrollHeight;
    
    }