window.console.log
Internet Explorer 9 กำหนดไว้ในสถานการณ์ใด?
แม้เมื่อwindow.console.log
มีการกำหนดwindow.console.log.apply
และwindow.console.log.call
ไม่ได้กำหนด ทำไมนี้
[คำถามที่เกี่ยวข้องกับ IE8: เกิดอะไรขึ้นกับ console.log ใน IE8 .]
window.console.log
Internet Explorer 9 กำหนดไว้ในสถานการณ์ใด?
แม้เมื่อwindow.console.log
มีการกำหนดwindow.console.log.apply
และwindow.console.log.call
ไม่ได้กำหนด ทำไมนี้
[คำถามที่เกี่ยวข้องกับ IE8: เกิดอะไรขึ้นกับ console.log ใน IE8 .]
คำตอบ:
ใน Internet Explorer 9 (และ 8) console
วัตถุนั้นจะปรากฏเฉพาะเมื่อเปิดเครื่องมือสำหรับนักพัฒนาสำหรับแท็บเฉพาะ หากคุณซ่อนหน้าต่างเครื่องมือสำหรับนักพัฒนาสำหรับแท็บนั้นconsole
วัตถุจะยังคงปรากฏสำหรับแต่ละหน้าที่คุณนำทาง หากคุณเปิดแท็บใหม่คุณต้องเปิดเครื่องมือสำหรับนักพัฒนาสำหรับแท็บนั้นเพื่อให้console
วัตถุปรากฏ
console
วัตถุไม่ได้เป็นส่วนหนึ่งของมาตรฐานใด ๆ และเป็นส่วนขยายไปรูปแบบวัตถุเอกสาร เช่นเดียวกับวัตถุ DOM อื่น ๆ มันถูกพิจารณาว่าเป็นวัตถุโฮสต์และไม่จำเป็นต้องสืบทอดObject
หรือวิธีการใดFunction
ๆ เช่นฟังก์ชัน ECMAScript ดั้งเดิมและวัตถุทำ นี่คือเหตุผลapply
และcall
ไม่ได้กำหนดไว้ในวิธีการเหล่านั้น ใน IE 9 วัตถุ DOM ส่วนใหญ่ได้รับการปรับปรุงเพื่อสืบทอดจากชนิด ECMAScript ดั้งเดิม เนื่องจากเครื่องมือของนักพัฒนาซอฟต์แวร์ถือเป็นส่วนเสริมสำหรับ IE (แม้ว่าจะเป็นส่วนเสริมในตัว) พวกเขาจึงไม่ได้รับการปรับปรุงเหมือนกับ DOM ที่เหลือ
สำหรับสิ่งที่คุ้มค่าคุณยังคงสามารถใช้Function.prototype
วิธีการบางอย่างกับconsole
วิธีการด้วยbind()
เวทมนตร์เล็กน้อย:
var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
//-> "thisisatest"
console
วัตถุของ Firebug
ทางออกที่ง่ายสำหรับปัญหา console.log นี้คือการกำหนดสิ่งต่อไปนี้ที่จุดเริ่มต้นของรหัส JS ของคุณ:
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
สิ่งนี้ใช้ได้สำหรับฉันในเบราว์เซอร์ทั้งหมด สิ่งนี้จะสร้างฟังก์ชันดัมมีสำหรับ console.log เมื่อดีบักเกอร์ไม่ทำงาน เมื่อดีบักเกอร์แอ็คทีฟเมธอด console.log จะถูกกำหนดและดำเนินการตามปกติ
ฉันรู้ว่านี่เป็นคำถามที่เก่ามาก แต่รู้สึกว่านี่เป็นการเพิ่มทางเลือกที่มีค่าของวิธีจัดการกับปัญหาคอนโซล วางรหัสต่อไปนี้ก่อนการเรียกเพื่อคอนโซล * (ดังนั้นสคริปต์แรกของคุณ)
// 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
console.log ถูกกำหนดเมื่อเปิดคอนโซลเท่านั้น หากคุณต้องการตรวจสอบมันในรหัสของคุณให้แน่ใจว่าคุณตรวจสอบได้ในคุณสมบัติหน้าต่าง
if (window.console)
console.log(msg)
นี่จะทำให้เกิดข้อยกเว้นใน IE9 และจะทำงานไม่ถูกต้อง อย่าทำอย่างนี้
if (console)
console.log(msg)
หลังจากอ่านบทความจากความคิดเห็นของ Marc Cliament ข้างบนตอนนี้ฉันได้เปลี่ยนฟังก์ชั่น cross-browser console.log อเนกประสงค์ของฉันเป็นดังนี้:
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);
}
}
}
Function.prototype.apply.call(console.log, console, arguments);
ฉันอยากจะพูดถึงว่า IE9 ไม่เพิ่มข้อผิดพลาดถ้าคุณใช้ console.log ด้วยเครื่องมือของนักพัฒนาซอฟต์แวร์ที่ปิดใน Windows ทุกรุ่น ใน XP ใช้งานได้ แต่บน Windows 7 ไม่เป็นเช่นนั้น ดังนั้นหากคุณไม่สนับสนุน WinXP โดยทั่วไปคุณก็สามารถใช้ console.log ได้โดยตรง
เกี่ยวกับ...
console = { log : function(text) { alert(text); } }