Кроосбраузерность. С помощью чего?
День добрый.
Прочёл часть учебника по 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, время: 04:34. |