опуская или изменяя / расширяя встроенные методы javascript для совместимости - PullRequest
0 голосов
/ 26 августа 2011

Сегодня я читал о console.log() где-то в Stackoverflow, и я помню, что читал, что это приводит к ошибкам IE.Пользователь сказал, что все его экземпляры должны быть удалены из кода перед развертыванием, или можно использовать библиотеку javascript , чтобы опустить ее в IE.

Мой вопрос касается второго варианта,как написать такую ​​библиотеку?Будет ли это что-то, что запускается onload, которое влияет на то, как js анализируется с этого момента?Как что-то, что говорит if browser == IE, omit all instances of console.log() ... или это будет расширение метода console.log(), которое заставляет его осознавать, в каком браузере он вызывается?Я немного знаком с расширением функций jQuery, но никогда не видел, чтобы это делалось с сырыми js.Я заинтересован в этом, потому что чувствую, что это был бы хороший способ добиться кросс-совместимости браузеров, в общем, речь не идет о console.log() конкретно.

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

Один из подходов - просто убедиться, что console.log() всегда определен, так что вы всегда можете использовать его, не беспокоясь. Вы можете добавить этот код, чтобы убедиться, что он всегда определен.

Этот код сделает так, что в IE (или в любом другом браузере, у которого его нет), console.log() будет определено и безопасно ничего не будет делать. Когда он уже существует, этот код ничего не будет делать, оставляя прежнее определение console.log() на месте и не трогая.

if (!window.console) {
    window.console = {};
}
if (!console.log) {
    console.log = function() {};
}
1 голос
/ 26 августа 2011

Существует несколько различных способов проверки глобальных свойств, которые могут существовать или не существовать.Вы должны стараться быть максимально защищенным, например,

var global = this;

if (!('console' in global)) {
  global.console = {};
}

if (!('log' in global.console)) {
  global.console.log = /* whatever */;
}

В тестах, возможно, вместо этого можно использовать typeof .Идея состоит в том, чтобы не использовать идентификатор, который может не существовать.Возможно, немного разумнее это:

// If console exists, declaring it will not hurt
// If it didn't exist, it does now
var console;

if (typeof console == 'undefined') {
  console = {};
}

if (typeof console.log == 'undefined') {
     console.log = /* whatever */;
}
...