update - your computer does not have javascript enabled




"وحدة التحكم" هو خطأ غير معروف لبرنامج Internet Explorer (14)

أنا أستخدم Firebug ولدي بعض العبارات مثل:

console.log("...");

في صفحتي. في IE8 (ربما الإصدارات السابقة أيضا) أحصل على أخطاء في البرنامج النصي تقول "تعزية" غير محددة. حاولت وضع هذا في أعلى صفحتي:

<script type="text/javascript">
    if (!console) console = {log: function() {}};
</script>

ما زلت أحصل على الأخطاء. أي طريقة للتخلص من الأخطاء؟


أنا أستخدم fauxconsole ؛ لقد عدلت css قليلاً حتى تبدو أجمل لكنها تعمل بشكل جيد جدًا.


أنا فقط باستخدام console.log في التعليمة البرمجية الخاصة بي. لذلك أقوم بتضمين 2 بطانة قصيرة جداً

var console = console || {};
console.log = console.log || function(){};

بديل آخر هو عامل التشغيل typeof :

if (typeof console == "undefined") {
    this.console = {log: function() {}};
}

بعد بديل آخر هو استخدام مكتبة تسجيل ، مثل log4javascript الخاصة log4javascript .


بعد أن واجهت الكثير من المشاكل مع هذا الشيء (من الصعب تصحيح الخطأ منذ أن قمت بفتح وحدة تحكم المطور ، لم يعد يحدث الخطأ!) قررت أن أكون رمزًا مبالغة لا يجب أن أزعج بهذا مرة أخرى أبدًا:

if (typeof window.console === "undefined")
    window.console = {};

if (typeof window.console.debug === "undefined")
    window.console.debug= function() {};

if (typeof window.console.log === "undefined")
    window.console.log= function() {};

if (typeof window.console.error === "undefined")
    window.console.error= function() {alert("error");};

if (typeof window.console.time === "undefined")
    window.console.time= function() {};

if (typeof window.console.trace === "undefined")
    window.console.trace= function() {};

if (typeof window.console.info === "undefined")
    window.console.info= function() {};

if (typeof window.console.timeEnd === "undefined")
    window.console.timeEnd= function() {};

if (typeof window.console.group === "undefined")
    window.console.group= function() {};

if (typeof window.console.groupEnd === "undefined")
    window.console.groupEnd= function() {};

if (typeof window.console.groupCollapsed === "undefined")
    window.console.groupCollapsed= function() {};

if (typeof window.console.dir === "undefined")
    window.console.dir= function() {};

if (typeof window.console.warn === "undefined")
    window.console.warn= function() {};

Personaly يمكنني فقط استخدام console.log و console.error ، ولكن هذا الرمز يعالج جميع الوظائف الأخرى كما هو موضح في شبكة مطوري Mozzila: https://developer.mozilla.org/en-US/docs/Web/API/console . ضع هذا الرمز في أعلى صفحتك وقمت بإنجازه للأبد مع هذا.


في IE9 ، إذا لم يتم فتح وحدة التحكم ، هذا الكود:

alert(typeof console);

سوف تظهر "الكائن" ، ولكن هذا الرمز

alert(typeof console.log);

سوف يلقي استثناء TypeError ، ولكن لا يرجع قيمة غير محددة ؛

لذلك ، سيبدو إصدار الأكواد المضمون مشابهًا لهذا:

try {
    if (window.console && window.console.log) {
        my_console_log = window.console.log;
    }
} catch (e) {
    my_console_log = function() {};
}

في بعض الأحيان ستعمل وحدة التحكم في IE8 / 9 لكنها تفشل في أوقات أخرى. يعتمد هذا السلوك الخاطئ على ما إذا كان لديك أدوات مطورة مفتوحة وموصوفة في سؤال هل يدعم IE9 console.log ، وهل هي وظيفة حقيقية؟


قم بلصق التالي في الجزء العلوي من JavaScript (قبل استخدام وحدة التحكم):

/**
 * Protect window.console method calls, e.g. console is not defined on IE
 * unless dev tools are open, and IE doesn't define console.debug
 * 
 * Chrome 41.0.2272.118: debug,error,info,log,warn,dir,dirxml,table,trace,assert,count,markTimeline,profile,profileEnd,time,timeEnd,timeStamp,timeline,timelineEnd,group,groupCollapsed,groupEnd,clear
 * Firefox 37.0.1: log,info,warn,error,exception,debug,table,trace,dir,group,groupCollapsed,groupEnd,time,timeEnd,profile,profileEnd,assert,count
 * Internet Explorer 11: select,log,info,warn,error,debug,assert,time,timeEnd,timeStamp,group,groupCollapsed,groupEnd,trace,clear,dir,dirxml,count,countReset,cd
 * Safari 6.2.4: debug,error,log,info,warn,clear,dir,dirxml,table,trace,assert,count,profile,profileEnd,time,timeEnd,timeStamp,group,groupCollapsed,groupEnd
 * Opera 28.0.1750.48: debug,error,info,log,warn,dir,dirxml,table,trace,assert,count,markTimeline,profile,profileEnd,time,timeEnd,timeStamp,timeline,timelineEnd,group,groupCollapsed,groupEnd,clear
 */
(function() {
  // Union of Chrome, Firefox, IE, Opera, and Safari console methods
  var methods = ["assert", "cd", "clear", "count", "countReset",
    "debug", "dir", "dirxml", "error", "exception", "group", "groupCollapsed",
    "groupEnd", "info", "log", "markTimeline", "profile", "profileEnd",
    "select", "table", "time", "timeEnd", "timeStamp", "timeline",
    "timelineEnd", "trace", "warn"];
  var length = methods.length;
  var console = (window.console = window.console || {});
  var method;
  var noop = function() {};
  while (length--) {
    method = methods[length];
    // define undefined methods as noops to prevent errors
    if (!console[method])
      console[method] = noop;
  }
})();

ملحق إغلاق الدالة هو نطاق المتغيرات بحيث لا يتم تعريف أي متغيرات. هذا يحمي ضد كل console غير معرفة و console.debug غير معرف (وغيرها من الأساليب المفقودة).

EDIT: لاحظت أن HTML5 Boilerplate يستخدم رمزًا مشابهًا في ملف js / plugins.js ، إذا كنت تبحث عن حل يحتمل تحديثه (على الأرجح).


كعب الروتين وحدة التحكم في TypeScript:

if (!window.console) {
console = {
    assert: () => { },
    clear: () => { },
    count: () => { },
    debug: () => { },
    dir: () => { },
    dirxml: () => { },
    error: () => { },
    group: () => { },
    groupCollapsed: () => { },
    groupEnd: () => { },
    info: () => { },
    log: () => { },
    msIsIndependentlyComposed: (e: Element) => false,
    profile: () => { },
    profileEnd: () => { },
    select: () => { },
    time: () => { },
    timeEnd: () => { },
    trace: () => { },
    warn: () => { },
    }
};

لتصحيح الأخطاء في IE ، راجع هذا log4javascript


للحصول على حل أكثر قوة ، استخدم هذه الشفرة (المأخوذة من شفرة المصدر في تويتر):

// Avoid `console` errors in browsers that lack a console.
(function() {
    var method;
    var noop = function () {};
    var methods = [
        'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
        'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
        'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
        'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];

        // Only stub undefined methods.
        if (!console[method]) {
            console[method] = noop;
        }
    }
}());

واجه مشكلة مماثلة تشغيل console.log في النوافذ التابعة في IE9 ، التي أنشأتها وظيفة window.open.

يبدو أنه في هذه الحالة يتم تعريف وحدة التحكم فقط في الإطار الأصل ولا يتم تعريفها في الإطارات الفرعية حتى تقوم بتحديثها. ينطبق الشيء نفسه على الأطفال من نوافذ الأطفال.

أتعامل مع هذه المشكلة من خلال التفاف السجل في الوظيفة التالية (أدناه جزء من الوحدة)

getConsole: function()
    {
        if (typeof console !== 'undefined') return console;

        var searchDepthMax = 5,
            searchDepth = 0,
            context = window.opener;

        while (!!context && searchDepth < searchDepthMax)
        {
            if (typeof context.console !== 'undefined') return context.console;

            context = context.opener;
            searchDepth++;
        }

        return null;
    },
    log: function(message){
        var _console = this.getConsole();
        if (!!_console) _console.log(message);
    }

يمكنك استخدام console.log() إذا كان لديك Developer Tools في IE8 مفتوحًا ويمكنك أيضًا استخدام مربع نص Console على علامة التبويب البرنامج النصي.


يمكنك استخدام أدناه لإعطاء درجة إضافية من التأمين التي كنت قد حصلت على جميع القواعد المشمولة. استخدام typeof الأول سوف تجنب أي أخطاء undefined . إن استخدام === سيضمن أيضًا أن اسم النوع هو في الواقع السلسلة "غير معرفة". وأخيرًا ، ستحتاج إلى إضافة معلمة إلى توقيع الدالة (اخترت logMsg بشكل تعسفي) لضمان التناسق ، بما أنك تمرر ما تريد طباعته إلى وحدة التحكم إلى وظيفة السجل. هذا أيضا تبقي أنت intellisense دقيقة وتجنب أي تحذيرات / أخطاء في IDE تدرك شبيبة بك.

if(!window.console || typeof console === "undefined") {
  var console = { log: function (logMsg) { } };
}

console = console || { 
    debug: function(){}, 
    log: function(){}
    ...
}






ie-developer-tools