আইই 9 কি কনসোল.লগ সমর্থন করে এবং এটি কি আসল কাজ?


209

কোন পরিস্থিতিতে window.console.logইন্টারনেট এক্সপ্লোরার 9 এ সংজ্ঞায়িত করা হয়েছে?

এমনকি যখন window.console.logসংজ্ঞায়িত হয়, window.console.log.applyএবং window.console.log.callঅপরিজ্ঞাত হয়। কেন?

[আই 8 সম্পর্কিত সম্পর্কিত প্রশ্ন: আইই 8-তে কনসোল.লগের কী হয়েছিল? ।]




@ মার্কক্লিমেন্ট লিঙ্কটি মারা গেছে
চেকেদা ২ '

@ চকেডা আমি ঘৃণা করি যখন এটি ঘটে, ওয়েব আর্কাইভ থেকে লিঙ্কটি রয়েছে: web.archive.org/web/20140625085155/http://wuttheheadsaid.com/…
মার্ক ক্লিমেট

উত্তর:


299

ইন্টারনেট এক্সপ্লোরার 9 (এবং 8) এ, consoleকেবলমাত্র কোনও নির্দিষ্ট ট্যাবের জন্য বিকাশকারী সরঞ্জাম খোলার সময় অবজেক্টটি উন্মুক্ত হয়। যদি আপনি সেই ট্যাবটির জন্য বিকাশকারী সরঞ্জাম উইন্ডোটি আড়াল করেন তবে consoleআপনার নেভিগেট করা প্রতিটি পৃষ্ঠার জন্য অবজেক্টটি উন্মুক্ত থাকবে। আপনি যদি কোনও নতুন ট্যাব খোলেন তবে consoleঅবজেক্টটি উন্মুক্ত হওয়ার জন্য আপনাকে অবশ্যই সেই ট্যাবটির জন্য বিকাশকারী সরঞ্জামগুলি খুলতে হবে।

consoleবস্তুর কোনো মান অংশ নয় এবং নথি অবজেক্ট মডেল একটি এক্সটেনশান। অন্যান্য ডিওএম অবজেক্টের মতো এটিকে একটি হোস্ট অবজেক্ট হিসাবে বিবেচনা করা হয় Objectএবং এর Functionনেটিভ ইসিএমএসক্রিপ্ট ফাংশন এবং অবজেক্টগুলির মতো এর পদ্ধতিগুলিও উত্তরাধিকার সূত্রে গ্রহণ করার প্রয়োজন হয় না। এটিই কারণ applyএবং callএই পদ্ধতিগুলিতে অপরিবর্তিত। আইই 9 তে, বেশিরভাগ DOM অবজেক্টগুলি দেশীয় ECMAScript ধরণের থেকে উত্তরাধিকারে উন্নত করা হয়েছিল। যেহেতু বিকাশকারী সরঞ্জামগুলি আইই (যেমন একটি বিল্ট-ইন এক্সটেনশন) এর এক্সটেনশন হিসাবে বিবেচিত হয়, তারা স্পষ্টতই ডিওএমের বাকী অংশগুলির মতো একই উন্নতি পায়নি।

এটির মূল্য কী, এর জন্য আপনি সামান্য যাদু দিয়ে পদ্ধতিগুলিতে কিছু Function.prototypeপদ্ধতি ব্যবহার করতে পারেন :consolebind()

var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
//-> "thisisatest"

2
ফায়ারব্যাগের consoleঅবজেক্টের ক্ষেত্রেও একই কথা ।
মার্সেল কোরপেল

150
আমি অ-গর্বের সাথে বলতে পারি যে ওয়েবের জন্য আমি যে বেশিরভাগ বছর বিকাশ করেছি আমি ধরে নিয়েছি কনসোল.লগ সমস্ত বড় ব্রাউজার দ্বারা সমর্থিত। আমি মাত্র একটি দিন ব্যয় করে কাটিয়েছি কেন IE9 আমার স্ক্রিপ্টটি পছন্দ করে না এবং এখন কেন জানি - এটির প্রথম ধাপে একটি কনসোল.লগ ছিল। ডিবাগ করা অসম্ভব, যেহেতু ডিবাগ মোড ঘুরিয়ে দেওয়ার ফলে এই ত্রুটিটি তাত্ক্ষণিকভাবে দূরে চলে গেছে: স্পষ্টির জন্য ধন্যবাদ !!
f055

2
গতকালও একই সমস্যা ছিল। ডিবাগবার ইনস্টল করা আমার দ্রুততর সাহায্যে ঘটেছে কারণ এটি কনসোল অবজেক্টটি সংজ্ঞায়িত করে না। সুতরাং আমি যখন আইই কনসোলটি লুকিয়েছি কিন্তু ডিবাগবারটি না করে আমি পরে থেকে একটি বার্তা পেয়েছি যে একটি জাভাস্ক্রিপ্ট ত্রুটি রয়েছে (কনসোলটি সংজ্ঞায়িত নয়)।
সাইমন এ.উগস্টার

আইই @ f055
লাকি আলী

7
ইন্টারনেট বিকল্প -> উন্নত -> প্রতিটি স্ক্রিপ্ট ত্রুটি সম্পর্কে একটি বিজ্ঞপ্তি প্রদর্শন করুন। ওয়েব বিকাশকারীদের সর্বদা এই আই-তে চেক করা উচিত। এটি আপনাকে কনসোল সম্পর্কে অবহিত করবে, বা লগ ফাংশন অপরিজ্ঞাপিত হয়েছে ... বার্তাটি ঠিক মনে করতে পারে না।
শেঠ ফুল 19

166

এই কনসোল.লগ সমস্যার সহজ সমাধান হ'ল আপনার জেএস কোডের শুরুতে নিম্নলিখিতটি সংজ্ঞায়িত করা:

if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };

এটি আমার জন্য সমস্ত ব্রাউজারে কাজ করে। এটি কনসোল.লগের জন্য একটি ডামি ফাংশন তৈরি করে যখন ডিবাগারটি সক্রিয় থাকে না। ডিবাগারটি সক্রিয় থাকাকালীন পদ্ধতিটি কনসোল.লগ সংজ্ঞায়িত হয় এবং সাধারণত সম্পাদন করে।


8
আরো তথ্য, এবং আরো জোরালো কনসোল প্রতিস্থাপন (অন্যান্য কনসোল পদ্ধতি সহ) এখানে: stackoverflow.com/questions/8002116/...
জ্যাক Lysobey

@ জাচএল: কংক্রিটের মধ্যে কোনটি?
হ্যাক্রে

আমার উত্তরের একটি পন্থা রয়েছে: stackoverflow.com/a/15771110/363701 । এছাড়াও এটি পরীক্ষা করে দেখুন: github.com/paulmillr/console-polyfill/blob/master/index.js
জাচ লিসোবেই

13

আমি জানি এটি একটি খুব পুরানো প্রশ্ন তবে এটি কনসোল সমস্যাটি কীভাবে মোকাবেলা করতে হবে তার একটি মূল্যবান বিকল্প যুক্ত করেছে feel কনসোলে কোনও কল করার আগে নিম্নলিখিত কোডটি রাখুন * (সুতরাং আপনার প্রথম স্ক্রিপ্ট)।

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

তথ্যসূত্র:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js


10

কনসোল.লগ কেবল তখনই সংজ্ঞায়িত করা হয় যখন কনসোলটি খোলা থাকে। আপনি যদি আপনার কোডটিতে এটি পরীক্ষা করতে চান তবে নিশ্চিত হয়ে নিন যে আপনি এটি উইন্ডোতে রেখেছেন

if (window.console)
    console.log(msg)

এটি IE9 এ ব্যতিক্রম ছুঁড়েছে এবং সঠিকভাবে কাজ করবে না। এটা করো না

if (console) 
    console.log(msg)

6

উপরের মার্ক মার্কেটের মন্তব্যটি থেকে নিবন্ধটি পড়ার পরে, আমি এখন আমার অল-উদ্দেশ্য ক্রস ব্রাউজার কনসোল.লগ ফাংশনটি দেখতে এটি পরিবর্তন করেছি:

function log()
{
    "use strict";

    if (typeof(console) !== "undefined" && console.log !== undefined)
    {
        try
        {
            console.log.apply(console, arguments);
        }
        catch (e)
        {
            var log = Function.prototype.bind.call(console.log, console);
            log.apply(console, arguments);
        }
    }
}

1
ঠিকFunction.prototype.apply.call(console.log, console, arguments);
ভিক্টর

@ ভিক্টর এটি অবশ্যই একমাত্র উত্তর গ্রহণ করা উচিত!
পাভেল ফ্রাঙ্কভ

0

আমি উল্লেখ করতে চাই যে আপনি উইন্ডোজের সমস্ত সংস্করণে বন্ধ বিকাশকারী সরঞ্জামগুলির সাথে কনসোল.লগ ব্যবহার করলে আইই 9 ত্রুটি বাড়ায় না। এক্সপিতে এটি করে তবে উইন্ডোজ on এ এটি হয় না। সুতরাং আপনি যদি সাধারণভাবে WinXP- এর জন্য সমর্থন বাদ দেন তবে আপনি সরাসরি কনসোল.লগ ব্যবহার করে ভাল fine


-1

কেমন...

console = { log : function(text) { alert(text); } }

1
এটি কিছু ক্ষেত্রে একটি উত্তীর্ণ কাজ হতে পারে, কিন্তু আপনি আসলে প্রশ্নের সমাধান করেননি।
pswg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.