Поддерживаются ли все браузеры? Я хотел бы вывести ошибку, используя console.log()
, но задавался вопросом, поддерживается ли это всеми браузерами?
console.log("Error etc");
Поддерживаются ли все браузеры? Я хотел бы вывести ошибку, используя console.log()
, но задавался вопросом, поддерживается ли это всеми браузерами?
console.log("Error etc");
Нет, не все браузеры поддерживают console.log
, поскольку он не является частью стандарта и является расширением DOM, и поэтому вы не должны рассчитывать на его присутствие. Чтобы сделать ваш код устойчивым, вы должны предположить, что он не существует и код соответственно.
В прошлом я делал что-то вроде этого:
// Log to native console if possible, alert otherwise
window.console = typeof window.console === 'undefined'
? {log:function(/* polymorphic */){alert(arguments)}}
: window.console;
Вы можете поместить это в "верх" вашего JS, и он работает очень хорошо, когда вы вынуждены выполнять отладку с браузером, который не поддерживает console
, и не требует, чтобы вы меняли другого источника JS, который уже вызывает console.log
повсюду. Конечно, вы можете захотеть сделать что-то другое, кроме alert
, чтобы сохранить свое правоту...
Большинство браузеров делают, однако Internet Explorer 9 имеет проблемы с ним, где он не запускает какой-либо javascript, если у вас нет окна отладки. Потребовались часы, чтобы найти решение этой проблемы.
Сделайте функцию обертки:
function log(text) {
if (window.console) {
window.console.log(text);
}
}
Сейчас август 2015 года, и я думаю, что текущий ответ на этот вопрос:
Все основные браузеры для мобильных и настольных компьютеров console.log. (caniuse)
Он не является частью какого-либо стандарта, но теперь он является ожидаемым результатом полного современного браузера.
Однако:
Если вам необходимо поддерживать старые браузеры (IE < 10), больше мобильных браузеров или пользователей, работающих с экспериментальными браузерами, тогда может быть хорошей идеей использовать polyfill (1, 2, 3, 4), чтобы обеспечить
window.console
.Он может не работать в WebWorkers во всех браузерах. (MDN)
В Opera Mini функции будут запущены, но вы не увидите результат. (caniuse)
Но для подавляющего большинства пользователей Интернета, мы можем предположить, что console.log
будет работать как ожидалось.
Этот код проверяет, существует ли эта функция и создает фиктивный файл, если это не так. Кредит: fooobar.com/questions/5801/...
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
Вот обходной путь, когда console.log()
недоступен. Вы должны сами взять console.logs
.
if (!window.console) window.console = {};
if (!window.console.log)
{
window.console.logs = [];
window.console.log = function (string)
{
window.console.logs.push(string);
};
}
Хотя не все браузеры поддерживают это, это может быть выполнено с небольшим количеством кода.
В своей книге "Тайны Javascript Ninja" Джон Ресиг (создатель jQuery) имеет действительно простой код, который будет обрабатывать проблемы с кросс-браузером console.log
. Он объясняет, что он хотел бы иметь сообщение журнала, которое работает со всеми браузерами, и вот как он закодировал его:
function log() {
try {
console.log.apply(console, arguments);
} catch(e) {
try {
opera.postError.apply(opera, arguments);
}
catch(e) {
alert(Array.prototype.join.call( arguments, " "));
}
}