'कंसोल' इंटरनेट एक्सप्लोरर के लिए अपरिभाषित त्रुटि है


375

मैं Firebug का उपयोग कर रहा हूँ और कुछ कथन हैं:

console.log("...");

मेरे पेज में IE8 में (शायद पहले के संस्करण भी) मुझे स्क्रिप्ट की त्रुटियां यह कहते हुए मिलती हैं कि 'कंसोल' अपरिभाषित है। मैंने इसे अपने पृष्ठ के शीर्ष पर रखने की कोशिश की:

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

फिर भी मुझे त्रुटियाँ मिलती हैं। त्रुटियों से छुटकारा पाने का कोई तरीका?


4
typeofअपने में उपयोग करें , यह अपरिभाषित त्रुटियों से बचना होगा: if(typeof console === "undefined") { var console = { log: function (logMsg) { } }; }
Flak DiNenno

21
कंसोल.लॉग () केवल तब काम करता है जब IE का उपकरण खुला है (हाँ IE भद्दा है)। देखें stackoverflow.com/questions/7742781/…
Adrien Be

1
उस सवाल का सबसे अच्छा जवाब है stackoverflow.com/a/16916941/2274855
विनियस मोराज़


1
@ एपिलिन लिंक टूट गया है, इसके बजाय इसका उपयोग करें: github.com/h5bp/html5-boilerplate/blob/master/src/js/plugins.js
अल्फ्रेड बेज

जवाबों:


378

प्रयत्न

if (!window.console) console = ...

एक अपरिभाषित चर को सीधे संदर्भित नहीं किया जा सकता है। हालाँकि, सभी वैश्विक चर वैश्विक संदर्भ ( windowब्राउज़र के मामले में) के एक ही नाम के गुण हैं , और अपरिभाषित विशेषता तक पहुँचना ठीक है।

या उपयोग करें if (typeof console === 'undefined') console = ...यदि आप जादू चर से बचना चाहते windowहैं, तो @ डाउन का उत्तर देखें


160
बस इसका उपयोग करने वाले किसी अन्य व्यक्ति से स्पष्ट रहें, <script type="text/javascript"> if (!window.console) console = {log: function() {}}; </script>अपने पृष्ठ के शीर्ष पर रखें! धन्यवाद केनी।
विंडोज़ जूल

11
के बारे में क्याvar console = console || { log: function() {} };
devlord

9
@ लॉर्डदेव उस आशुलिपि का उपयोग करने के लिए आपको शामिल करना होगा window:var console = window.console || { log: function() {} };
jlengstorf

64
धिक्कार है ... आप एक अच्छी वेबसाइट बनाते हैं, इसे अपने पसंदीदा ब्राउज़र के लिए विकसित करते हैं। अंत में आप 4-5 घंटे खर्च करते हैं जो इसे अन्य सभी मॉडर्न ब्राउज़रों के साथ संगत करता है, और फिर आप 4-5 दिनों को आईई के साथ संगत बनाकर खर्च करते हैं।
इज़राइल

6
उस उत्तर के साथ समस्या यह है कि यदि आप डिबग, चेतावनी जैसे किसी अन्य नाम का उपयोग कर रहे हैं, तो उस ब्राउज़र के साथ गणना करें, जिसमें कंसोल की कमी है, एक अपवाद को फेंक देगा जो कि stackoverflow.com/a/16916941/2274855
Viníciya Moraes

319

अपने जावास्क्रिप्ट के शीर्ष पर निम्नलिखित चिपकाएँ (कंसोल का उपयोग करने से पहले):

/**
 * 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(और अन्य लापता तरीकों) के खिलाफ गार्ड है ।

संपादित करें: मैंने देखा कि HTML5 Boilerplate अपने js / plugins.js फ़ाइल में समान कोड का उपयोग करता है, यदि आप एक समाधान की तलाश कर रहे हैं जो (शायद) अप-टू-डेट रखा जाएगा।


14
इसका उत्तर इतने कम उत्थान के लिए क्यों है? यह यहां तैनात लोगों में से सबसे पूर्ण है।
माविलिन

तारीख की वजह से। सही कार्य समाधान के साथ बिल्कुल सहमत हैं। मुझे लगता है कि इस विषय को संचालित करने की आवश्यकता है। त्रुटिपूर्ण अंग्रेजी के लिए माफ करें।
woto

पूरी तरह से सिवाय इसके कि यह लॉग फ़ंक्शन (यदि वर्तमान) में लॉगिंग को रीडायरेक्ट करने की कोशिश नहीं करेगा, तो सभी लॉग खो गए हैं
क्रिस्टोफ रूसो

5
यह वास्तव में कब होगा? इस कोड को केवल उन तत्वों को परिभाषित करना चाहिए जो अभी तक परिभाषित नहीं हैं।
पीटर Tseng

4
मुझे लगता है कि दोनों तरह से - (फंक्शन () {...} () () (फंक्शन () {...}) () - वास्तव में काम करता है
पीटर तेंग

73

एक अन्य विकल्प typeofऑपरेटर है:

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

फिर भी एक अन्य विकल्प लॉगिंग लाइब्रेरी का उपयोग करना है, जैसे कि मेरा अपना लॉग 4javascript


हालांकि अघोषित असाइनमेंट को उचित घोषणा में बदलना एक अच्छा विचार होगा।
कंगैक्स

1
क्या आप उपयोग करने का मतलब है var? यह केवल यहाँ चीजों को भ्रमित करेगा। या क्या आप के window.consoleबजाय असाइन करने का मतलब है console?
टिम डाउन

का उपयोग कर var। यहाँ चीजों को भ्रमित क्यों करेगा?
कंगैक्स

2
क्या भ्रामक चर्चा है। +1 से मूल उत्तर। अगर मैं +2 दे पाता तो मैं आपको log4javascript का लिंक प्रदान करता। धन्यवाद ओपी!
जे टेलर

8
@yart: नहीं typeof, स्ट्रिंग की वापसी की गारंटी है और "undefined"एक स्ट्रिंग है। जब दो ऑपरेंड एक ही प्रकार के होते हैं, ==और ===ठीक उसी चरण को करने के लिए निर्दिष्ट होते हैं। का उपयोग करते हुए typeof x == "undefined"परीक्षण करने के लिए एक रॉक-ठोस तरीका है कि है xकोई भी दायरा और किसी भी ECMAScript 3 अनुरूप वातावरण में अपरिभाषित है।
टिम डाउन

47

अधिक मजबूत समाधान के लिए, कोड के इस टुकड़े का उपयोग करें (ट्विटर के स्रोत कोड से लिया गया):

// 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;
        }
    }
}());

13

मेरी लिपियों में, मैं या तो आशुलिपि का उपयोग करता हूं:

window.console && console.log(...) // only log if the function exists

या, यदि यह संभव नहीं है या प्रत्येक कंसोल को संपादित करने के लिए संभव नहीं है। पंक्ति को मैं एक नकली कंसोल बनाता हूं:

// check to see if console exists. If not, create an empty object for it,
// then create and empty logging function which does nothing. 
//
// REMEMBER: put this before any other console.log calls
!window.console && (window.console = {} && window.console.log = function () {});

2
वक्य रचना त्रुटि। सिर्फ क्यों नहींif(!console) {console = {} ; console.log = function(){};}
Meekohi

1
या सिर्फ नहीं!window.console && (window.console = { log: function () { } });
मक्सिम वी।

10

console.log()यदि आप Developer ToolsIE8 में हैं, तो आप इसका उपयोग कर सकते हैं और साथ ही आप Consoleस्क्रिप्ट टैब पर टेक्स्टबॉक्स का उपयोग कर सकते हैं ।


7
यह अच्छा नहीं है अगर आप कंसोल कोड को स्वाइप करना भूल जाते हैं। IE8 में त्रुटि आपके जेएस कोड को काम करने से रोकेगी
रोकेगी

7
if (typeof console == "undefined") {
  this.console = {
    log: function() {},
    info: function() {},
    error: function() {},
    warn: function() {}
  };
}

1
चेतावनी उत्सर्जनकर्ता: इसे वैश्विक स्तर पर परिभाषित किया जाना चाहिए जहां thisसंदर्भित करता है window
स्वग्नल

7

पिछले दो उत्तरों के आधार पर

और के लिए दस्तावेज

यहाँ समस्या के लिए एक सर्वोत्तम प्रयास लागू किया गया है, जिसका अर्थ है कि एक कंसोल.लॉग जो वास्तव में मौजूद है, यह कंसोल के माध्यम से गैर-मौजूदा तरीकों के लिए अंतराल में भरता है।

IE6 / 7 के लिए उदाहरण के लिए आप चेतावनी (बेवकूफ काम करता है) के साथ लॉगिंग को बदल सकते हैं और फिर नीचे दिए गए राक्षस को शामिल कर सकते हैं (मैंने इसे कंसोल कहा जाता है। जेएस): [टिप्पणियों को हटाने के लिए स्वतंत्र महसूस करें जैसा कि आप फिट देखते हैं, मैंने उन्हें संदर्भ के लिए छोड़ दिया, एक न्यूनतर उनसे निपट सकता है]:

<!--[if lte IE 7]>
<SCRIPT LANGUAGE="javascript">
    (window.console = window.console || {}).log = function() { return window.alert.apply(window, arguments); };
</SCRIPT>
<![endif]-->
<script type="text/javascript" src="console.js"></script>

और कंसोल। Js:

    /**
     * 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
     */
    (function() {
        var console = (window.console = window.console || {});
        var noop = function () {};
        var log = console.log || noop;
        var start = function(name) { return function(param) { log("Start " + name + ": " + param); } };
        var end = function(name) { return function(param) { log("End " + name + ": " + param); } };

        var methods = {
            // Internet Explorer (IE 10): http://msdn.microsoft.com/en-us/library/ie/hh772169(v=vs.85).aspx#methods
            // assert(test, message, optionalParams), clear(), count(countTitle), debug(message, optionalParams), dir(value, optionalParams), dirxml(value), error(message, optionalParams), group(groupTitle), groupCollapsed(groupTitle), groupEnd([groupTitle]), info(message, optionalParams), log(message, optionalParams), msIsIndependentlyComposed(oElementNode), profile(reportName), profileEnd(), time(timerName), timeEnd(timerName), trace(), warn(message, optionalParams)
            // "assert", "clear", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "msIsIndependentlyComposed", "profile", "profileEnd", "time", "timeEnd", "trace", "warn"

            // Safari (2012. 07. 23.): https://developer.apple.com/library/safari/#documentation/AppleApplications/Conceptual/Safari_Developer_Guide/DebuggingYourWebsite/DebuggingYourWebsite.html#//apple_ref/doc/uid/TP40007874-CH8-SW20
            // assert(expression, message-object), count([title]), debug([message-object]), dir(object), dirxml(node), error(message-object), group(message-object), groupEnd(), info(message-object), log(message-object), profile([title]), profileEnd([title]), time(name), markTimeline("string"), trace(), warn(message-object)
            // "assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd", "info", "log", "profile", "profileEnd", "time", "markTimeline", "trace", "warn"

            // Firefox (2013. 05. 20.): https://developer.mozilla.org/en-US/docs/Web/API/console
            // debug(obj1 [, obj2, ..., objN]), debug(msg [, subst1, ..., substN]), dir(object), error(obj1 [, obj2, ..., objN]), error(msg [, subst1, ..., substN]), group(), groupCollapsed(), groupEnd(), info(obj1 [, obj2, ..., objN]), info(msg [, subst1, ..., substN]), log(obj1 [, obj2, ..., objN]), log(msg [, subst1, ..., substN]), time(timerName), timeEnd(timerName), trace(), warn(obj1 [, obj2, ..., objN]), warn(msg [, subst1, ..., substN])
            // "debug", "dir", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "time", "timeEnd", "trace", "warn"

            // Chrome (2013. 01. 25.): https://developers.google.com/chrome-developer-tools/docs/console-api
            // assert(expression, object), clear(), count(label), debug(object [, object, ...]), dir(object), dirxml(object), error(object [, object, ...]), group(object[, object, ...]), groupCollapsed(object[, object, ...]), groupEnd(), info(object [, object, ...]), log(object [, object, ...]), profile([label]), profileEnd(), time(label), timeEnd(label), timeStamp([label]), trace(), warn(object [, object, ...])
            // "assert", "clear", "count", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "profile", "profileEnd", "time", "timeEnd", "timeStamp", "trace", "warn"
            // Chrome (2012. 10. 04.): https://developers.google.com/web-toolkit/speedtracer/logging-api
            // markTimeline(String)
            // "markTimeline"

            assert: noop, clear: noop, trace: noop, count: noop, timeStamp: noop, msIsIndependentlyComposed: noop,
            debug: log, info: log, log: log, warn: log, error: log,
            dir: log, dirxml: log, markTimeline: log,
            group: start('group'), groupCollapsed: start('groupCollapsed'), groupEnd: end('group'),
            profile: start('profile'), profileEnd: end('profile'),
            time: start('time'), timeEnd: end('time')
        };

        for (var method in methods) {
            if ( methods.hasOwnProperty(method) && !(method in console) ) { // define undefined methods as best-effort methods
                console[method] = methods[method];
            }
        }
    })();

मुझे यकीन नहीं है कि हमें methods.hasOwnProperty(method) && लूप की आवश्यकता है।
ट्वीस्टरेब जुब

मुझे यकीन है कि आपको इसकी आवश्यकता है।
एरिक

क्रोम के कंसोल में त्वरित परीक्षण किया: > x = { a: 1, b: 2}-> Object {a: 1, b: 2}और for(var f in x) {console.log(f + " " + x[f]);} 'end'-> a 1 b 2 "end"। तो एक निर्मित अनाम वस्तु के पास कोई अतिरिक्त संपत्ति नहीं है, और methodsबस forलूप से पहले बनाई गई है । क्या उपरोक्त हैक करना संभव है?
ट्विस्टस्ट्रीम

3
हाँ। var x = { a: 1, b: 2}; Object.prototype.surprise = 'I\'m in yer objectz'; for (var f in x) {console.log(f, x[f]);}आप कभी नहीं जानते कि जिस लाइब्रेरी के साथ आप काम कर रहे हैं उसकी विरासत श्रृंखला में वस्तुओं के लिए एक पुस्तकालय ने क्या किया है। इस प्रकार javint और jslint जैसे उपयोग करने के लिए जावास्क्रिप्ट कोड गुणवत्ता उपकरण द्वारा सिफारिश hasOwnProperty
एरिक

6

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() {};
}

6

मैं केवल अपने कोड में कंसोल.लॉग का उपयोग कर रहा हूं। इसलिए मैं एक बहुत छोटा 2 लाइनर शामिल करता हूं

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

1
यह कैसे काम कर रहा है .. मैं IE ब्राउज़र पर छपी किसी भी कंसोल.लॉग लाइन को नहीं देख रहा हूं, मैंने 2 अलग-अलग प्रणालियों के साथ परीक्षण किया है जहां 1 - कंसोल.लॉग काम कर रहा है और 2 सिस्टम इसके नहीं है। मैं दोनों में कोशिश की, लेकिन दोनों प्रणालियों में कोई लॉग देखने में सक्षम नहीं है।
किरन

2

यह देखते हुए कि ओपी IE के साथ Firebug का उपयोग कर रहा है, इसलिए मान लें कि यह Firebug Lite है । यह एक कायरतापूर्ण स्थिति है क्योंकि डिबगर विंडो खोलने पर IE में कंसोल को परिभाषित किया जाता है, लेकिन जब फायरबग पहले से चल रहा है तो क्या होता है? निश्चित नहीं है, लेकिन शायद "फायरबगएक्स.जेएस" विधि इस स्थिति में परीक्षण करने का एक अच्छा तरीका हो सकता है:

स्रोत:

https://code.google.com/p/fbug/source/browse/branches/firebug1.2/lite/firebugx.js?r=187

    if (!window.console || !console.firebug) {
        var names = [
            "log", "debug", "info", "warn", "error", "assert",
            "dir","dirxml","group","groupEnd","time","timeEnd",
            "count","trace","profile","profileEnd"
        ];
        window.console = {};
        for (var i = 0; i < names.length; ++i)
            window.console[names[i]] = function() {}
    }

(अद्यतन लिंक 12/2014)


1

मैं fauxconsole का उपयोग कर रहा हूं ; मैंने सीएसएस को थोड़ा संशोधित किया ताकि यह अच्छा दिखे लेकिन बहुत अच्छा काम करता है।


1

IE में डीबगिंग के लिए, इस log4javascript को देखें


यह बहुत अच्छा है, विशेष रूप से मेरे IE8 कंसोल कुछ भी आउटपुट नहीं करता है।
फ़रिश - LetsWP.io

1
@ आपकी टिप्पणियों के लिए धन्यवाद।
प्रवीण

1
मैं यहाँ एक और सवाल पर टिप्पणी की तलाश कर रहा था जिसमें कहा गया था कि 'बेशर्म आत्म प्रचार' या मुझे नहीं पता - इसी तरह - किसी ने कहा कि उसने यह झांसा बनाया है, क्या यह आप थे? मैंने पहले ही उस टैब को बंद कर दिया। वैसे भी यह वास्तव में एक महान उपकरण है और मेरी परियोजना के लिए बहुत उपयोगी है।
फ़र्श - लेट्सवॉ।

1
@ फ़िरश ने इस लिपि को नहीं बनाया, मैं एक ऐसा व्यक्ति हूँ जिसे आपने टूल का उपयोग करके लाभान्वित किया।
प्रवीण

1

IE8 या कंसोल सपोर्ट कंसोल.लॉग तक सीमित है (कोई डीबग, ट्रेस, ...) आप निम्न कार्य कर सकते हैं:

  • यदि कंसोल OR कंसोल.लॉग अपरिभाषित है: कंसोल फ़ंक्शंस के लिए डमी फ़ंक्शंस बनाएं (ट्रेस, डीबग, लॉग, ...)

    window.console = { debug : function() {}, ...};

  • यदि कंसोल को परिभाषित किया गया है ।log को परिभाषित किया गया है (IE8) और कंसोल .ebug (किसी भी अन्य) को परिभाषित नहीं किया गया है: कंसोल के सभी लॉगिंग कार्यों को रीडायरेक्ट करें। यह लॉग को रखने की अनुमति देता है!

    window.console = { debug : window.console.log, ...};

विभिन्न IE संस्करणों में मुखर समर्थन के बारे में निश्चित नहीं है, लेकिन किसी भी सुझाव का स्वागत है। इस उत्तर को यहां भी पोस्ट करें: मैं इंटरनेट एक्सप्लोरर में कंसोल लॉगिंग का उपयोग कैसे कर सकता हूं?



1

टाइपस्क्रिप्ट में कंसोल का स्टब:

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: () => { },
    }
};

0

आप बीमा का एक अतिरिक्त डिग्री देने के लिए नीचे का उपयोग कर सकते हैं जिसे आपने सभी आधारों को कवर कर लिया है। typeofपहले प्रयोग से कोई undefinedत्रुटि नहीं होगी । उपयोग करने ===से यह भी सुनिश्चित होगा कि प्रकार का नाम वास्तव में स्ट्रिंग "अपरिभाषित" है। अंत में, आप logMsgस्थिरता को सुनिश्चित करने के लिए फ़ंक्शन सिग्नेचर (मैंने मनमाने ढंग से चुना ) में एक पैरामीटर जोड़ना चाहते हैं , क्योंकि आप लॉग फ़ंक्शन के लिए कंसोल में जो भी प्रिंट करना चाहते हैं उसे पास करते हैं। यह आपको अंतर्मुखी भी बनाए रखता है और आपके जेएस जागरूक आईडीई में किसी भी चेतावनी / त्रुटियों से बचा जाता है।

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

0

कभी-कभी IE8 / 9 में कंसोल काम करेगा लेकिन अन्य समय में विफल हो जाएगा। यह अनिश्चित व्यवहार इस बात पर निर्भर करता है कि क्या आपके पास डेवलपर उपकरण खुले हैं और स्टैकओवरफ्लो प्रश्न में वर्णित है क्या IE9 कंसोल कंसोल का समर्थन करता है, और क्या यह एक वास्तविक कार्य है?


0

IE9 में बनाई गई IE9 में चाइल्ड विंडो में कंसोल.लॉग चलाने में समान समस्या का सामना करना पड़ा।

ऐसा लगता है कि इस मामले में कंसोल केवल मूल विंडो में परिभाषित किया गया है और जब तक आप उन्हें ताज़ा नहीं करते हैं, बाल खिड़कियों में अपरिभाषित हैं। बाल खिड़कियों के बच्चों पर भी लागू होता है।

मैं अगले फ़ंक्शन में लॉग लपेटकर इस मुद्दे से निपटता हूं (नीचे मॉड्यूल का टुकड़ा है)

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);
    }

-2

ओह के बाद इस समस्या के साथ बहुत सारी समस्याएं हैं (यह त्रुटि को डीबग करना मुश्किल है क्योंकि यदि आप डेवलपर को खोलते हैं तो त्रुटि अब नहीं होती है!) मैंने एक ओवरकिल कोड बनाने का फैसला किया है ताकि कभी भी इस से परेशान न हों:

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 मैं कभी भी कंसोल.लॉग और कंसोल.इरोर का उपयोग करता हूं, लेकिन यह कोड अन्य सभी कार्यों को संभालता है जैसा कि Mozzila डेवलपर नेटवर्क में दिखाया गया है: https://developer.mozilla.org/en-US/docs/Web/API/console । बस उस कोड को अपने पृष्ठ के शीर्ष पर रखें और आप हमेशा के लिए इसके साथ हो जाते हैं।


-11

आप कंसोल का उपयोग कर सकते हैं। (...) सीधे फ़ायरफ़ॉक्स में लेकिन IE में नहीं। IE में आपको window.console का उपयोग करना होगा।


11
कंसोल.लॉग और window.console.log किसी भी ब्राउज़र में उसी फ़ंक्शन को संदर्भित करता है जो ECMAscript के साथ दूरस्थ रूप से अनुरूप भी है। किसी स्थानीय चर को गलती से वैश्विक कंसोल ऑब्जेक्ट से बचने के लिए उत्तरार्द्ध का उपयोग करना अच्छा है, लेकिन ब्राउज़र की पसंद से इसका कोई लेना-देना नहीं है। IE8 में कंसोल.लॉग ठीक काम करता है, और AFAIK IE6 / 7 में कोई लॉगिंग क्षमता नहीं है।
TGR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.