Кроосбраузерность. С помощью чего?
День добрый.
Прочёл часть учебника по JS на этом сайте (http://learn.javascript.ru), где автор, затрагивая вопросы достижения кроссбраузерности использовал проверку наличия того или иного метода через if-else Пример:
element.onclick = function(event) {
event = event || window.event; // Кроссбраузерно получить событие
if (event.stopPropagation) { // существует ли метод?
// Стандартно:
event.stopPropagation();
} else {
// Вариант IE
event.cancelBubble = true;
}
}
А вот только что смотрел курс "Специалиста", где преподаватель, заведя речь о кроссбраузерности, начинает говорить о try-catch-finally Т.е. в противовес коду, написанному выше, рекомендует делать так:
element.onclick = function(event) {
event = event || window.event; // Кроссбраузерно получить событие
try {
event.stopPropagation();
} catch {
event.cancelBubble = true;
}
Т.к. я ещё новичёк в JS - меня эта ситуация поставила в тупик. Как же всё-таки правильней решать вопросы кроссбраузерности? |
В последнем случае возбуждается исключение, это значит, что он менее производительный чем первый.
И еще, не назначайте так обработчики событий: element.onclick Нужно использовать специальные методы для работы с событиями (addEventListener и attachEvent). Для этого можно написать свою обертку:
<a href="#" id="link">click</a>
<script>
var $ = function(element)
{
if (!(this instanceof $))
return new $(element);
this.element = element;
};
$.prototype =
{
constructor: $,
on: function(event, callback)
{
if (typeof event !== 'string' && typeof callback !== 'function')
return this;
if (this.element.addEventListener)
this.element.addEventListener(event, callback, false);
else if (this.element.attachEvent)
{
this.element.attachEvent('on' + event, function(event)
{
callback.call(this, {
// ...
});
});
}
return this;
}
};
$(document.getElementById('link')).on('click', function(event) {
alert(event.target);
});
</script>
|
Как хотите, я также сторонник делать проверку на существование, нежели разрешать исключения, заранее должно быть известно, что и где работает, поэтому в работе с ошибками не вижу особого смысла
UPD: http://javascript.ru/forum/offtopic/...t-cenzury.html где-то в конце темы спрашивал об этом же |
недавно плагин прикручивал. В нем стояла проверка браузера. Везде работало, кроме IE9. И вроде плагин серьезный, API все такое, но ребята не учли, что IE8 и IE9 работают по разному :) Пришлось дебажить :D
|
Цитата:
if ( "stopPropagation" in event ) {
}
|
stereomaniac1,
у "специалиста" уровень подачи знаний js очень низкий. И уже не актуальные подходы. Сам их смотрел.. Если бы специалист преподавал по учебнику с этого сайта толку было бы больше! По поводу кроссбраузерности (имею в виду ie<9) не думаю что надо париться тем, кто сейчас приступает к изучению языка ИМХО. Так как с внедрением всяких вкусностей от html5 он просто утонет, если будет изучать как сделать какую-нибудь фитюльку, чтоб работала в старых ie! |
Цитата:
|
Цитата:
|
Цитата:
|
dmitry111, с кроссбраузерностью нужно начинать париться с самого начала изучения javascript, чтобы не возникало иллюзий. Нужно сразу понять, что каждый делает свои браузеры со своими преферансом и барышнями. И то, что можно написать что-то кроссплатформенное - это тоже иллюзия. Тут и так мертвым грузом висят всякие ie, так еще и мобильные браузеры. У этого 3d трансформации уже есть, у этого canvas тормозит, а этот вообще мультитач никак не понимает...
|
| Часовой пояс GMT +3, время: 03:32. |