ФорумПрограммированиеJavaScript → Console для IE6

Console для IE6

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 5:17

    На самом деле не только для шестого ИЕ а для тех браузеров у которых нету консоли, дебажить както надо а чтобы не заменять все вызовы консоли на алерты уже давно делают кончтрукции типа

    if(window.console)
    console.lod("myLog");


    или переопределяют
    if(window.console)
    window.console.log = function(){};


    мне это надоело и я решил написать что-то что позволит нормально отлаживать без заглушек. на ваше рассмотрение скрипт результат работы сегодняшнего дня


    myConsole = function(){
    var args  = Array.prototype.slice.call(arguments);
    if (args.length>2){
    (opera?opera.postError:alert)(args.shift() +':\n'+ args.shift().replace(/(%[ds])/g, function(){
    return args.shift();
    })
    )
    }else{
    // автор функции dump - Дмитрий Котеров
    // http://dklab.ru/chicken/nablas/38.html
    (opera?opera.postError:alert)(args.shift() +':\n'+ (function dump(d,l) {
       if (l == null) l = 1;
       var s = '';
       if (typeof(d) == "object") {
           s += typeof(d) + " {\n";
           for (var k in d) {
               for (var i=0; i<l; i++) s += "  ";
               s += k+": " + dump(d[k],l+1);
           }
           for (var i=0; i<l-1; i++) s += "  ";
           s += "}\n"
       } else {
           s += "" + d + "\n";
       }
       return s;
    })(args.shift()))
    }
    }

    if (window.loadFirebugConsole) {
    window.loadFirebugConsole();
    } else {
    if (!window.console) {
    window.console = {};
    window.console.info = function(){myConsole.apply(null,['info'].concat(Array.prototype.slice.call(arguments)))};
    }
    }



    Скрипт поддерживает форматный вывод типа printf и простой вывод объектов
    console.info("string: %d %s %d", 10, "text", 10);
    console.info({});


    единственное что я бы не советовал делать чтото вроде
    console.info(window);
    console.info(document);

    это скорее всего положит браузер или выдаст предупреждение о том что очень много рекурсивных вызовов

    Если не хватает INFO можно дописать остальные уровни дебага просто добавив несколько строк

    window.console.warn = function(){myConsole.apply(null,['warn'].concat(Array.prototype.slice.call(arguments)))};



  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 5:43, спустя 26 минут 1 секунду

    Крут, крут! Иногда полезно…
    А то надоело разбираться с FireBug Lite и IE Developer Toolbar :-)
    adw/0
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 24 декабря 2008 г. 6:14, спустя 30 минут 25 секунд

    мб в готовые решения?
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 24 декабря 2008 г. 6:20, спустя 5 минут 53 секунды


    мб в готовые решения?

    [15:25:16] sap говорит: круто
    [15:25:31] sap говорит: почему не в готовые решения?
    [15:34:53] CTAPbIu_MABP говорит: это не готовое решение
    [15:35:04] CTAPbIu_MABP говорит: это дебагер яваскрипта
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 6:22, спустя 2 минуты 36 секунд

    [16:28:51] epsyl говорит: тогда надо раздел "неготовые решения" )
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 6:25, спустя 2 минуты 21 секунду

    не ну если все считают что лучше в "готовые решения" то перенесите
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 10:46, спустя 37 минут 17 секунд

    это пиздец
    решил протестить под IE7 и что бы вы думали - ошибка

    Array.prototype.slice.call(arguments)


    не пашет, говорят в 8b2 в режиме IE7 пашет а в режиме IE8 - нет

    http://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=364463
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 11:11, спустя 24 минуты 58 секунд

    ааааааа

     if (typeof(d) == "object") {
    s += typeof(d) + " {\n";
    for (var k in d) {
    for (var i=0; i<l; i++) s += " ";
    s += k+": " + dump(d[k],l+1);
    }
    for (var i=0; i<l-1; i++) s += " ";
    s += "}\n"
    } else {
    s += "" + d + "\n";
    }

    пиздец как много конструкций …
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 12:13, спустя 1 час 2 минуты 6 секунд

    phpdude, можешь отрефакторить?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 12:34, спустя 20 минут 55 секунд


    phpdude, можешь отрефакторить?
    прости. бросил пить. :)
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 12:36, спустя 1 минуту 51 секунду

    phpdude, а ты курни)))
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 12:53, спустя 17 минут 2 секунды


    phpdude, а ты курни)))
    об этом я впервую очередь подумал)))) но курю только когда набуханный! я бросил пить, поэтому сори ))
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 24 декабря 2008 г. 13:45, спустя 51 минуту 49 секунд

    значит придется мне все делать самому
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 30 декабря 2008 г. 14:36, спустя 6 дней 50 минут

    последняя версия тут http://mabp.kiev.ua/content/2008/12/25/myconsole/

    ——-

    потестите плз


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>

    <script>


    var cast = function(i) {
    // call lazy function definition
    return (cast = !document.fileSize // IE any version
    ? function(i){return Array.prototype.slice.call(i);}
    : function(i){var l=i.length,a=[];while(l–){a[l]=i[l];}return a;}
    )(i);
    },

    show = function(m) {
    return (show=window.opera?window.opera.postError:window.alert)(m);
    },

    dump = function (d,l) {
    if (l == null) l = 1;
    var s = "";
    if (d == null || d == window || d == document || !d.toString().indexOf("[object HTML") || !d.toString().indexOf("[object Node")){
    s += "" + d + "\n";
    } else {
    s += d.constructor == Array ? "Array [" : "Object {" + "\n";
    for (var k in d) {
    for (var i=0; i<l; i++){
    s += " ";
    }
    s += k+": " + dump(d[k],l+1);
    }
    for (var i=0; i<l-1; i++){
    s += " ";
    }
    s += d.constructor == Array ? "]" : "}" + "\n";
    }
    return s;
    },

    myConsole = function(){
    var args = cast(arguments);

    if (args.length>2){
    show(args.shift() +":\n"+ args.shift().replace(/(%[ds])/g, function(){
    return args.shift();
    })
    )
    }else{
    show(args.shift() +":\n"+ dump(args.shift()));
    }
    };

    if (window.loadFirebugConsole) { // since FireBug 1.2
    window.loadFirebugConsole();
    } else if (!window.console) {
    window.console = {};
    var names = ["log", "debug", "info", "warn", "error"];
    for (var i in names){
    window.console[names] = (function(name){return function(){
    myConsole.apply(null,[name].concat(cast(arguments)))
    }})(names);
    }
    }

    window.onload = function(){
    console.log("string: %d %s %d", 10, "text", 10);
    console.info({});
    console.info([]);
    console.info(null);
    console.info(window);
    console.info(document);
    console.info(document.getElementsByTagName("body"));
    console.info(document.getElementsByTagName("body")[0]);
    }

    </script>

    </head>
    <body>
    </body>
    </html>


    добавлено через 144 часа

Пожалуйста, авторизуйтесь, чтобы написать комментарий!