| 
	| 
	
	| 
		
	| 
			
			 
			
				15.09.2012, 20:55
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 25.01.2012 
						Сообщений: 12
					 
		
 |  |  
	| 
				Кроосбраузерность. С помощью чего?
			 День добрый. 
Прочёл часть учебника по 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 - меня эта ситуация поставила в тупик. Как же всё-таки правильней решать вопросы кроссбраузерности? |  |  
	| 
		
	| 
			
			 
			
				15.09.2012, 21:05
			
			
			
		 |  
	| 
		
			
			| Особый гость     |  | 
					Регистрация: 02.04.2010 
						Сообщений: 4,260
					 
		
 |  |  
	| В последнем случае возбуждается исключение, это значит, что он менее производительный чем первый. 
И еще, не назначайте так обработчики событий:
 
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>
			 Последний раз редактировалось monolithed, 15.09.2012 в 21:46.
 |  |  
	| 
		
	| 
			
			 
			
				15.09.2012, 21:13
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 22.03.2012 
						Сообщений: 3,744
					 
		
 |  |  
	| Как хотите, я также сторонник делать проверку на существование, нежели разрешать исключения, заранее должно быть известно, что и где работает, поэтому в работе с ошибками не вижу особого смысла 
UPD: Можно ли считать это началом интернет цензуры ? 
где-то в конце темы спрашивал об этом же			 Последний раз редактировалось bes, 15.09.2012 в 21:16.
 |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 01:16
			
			
			
		 |  
	| 
		
			|  | junior       |  | 
					Регистрация: 29.11.2011 
						Сообщений: 3,924
					 
		
 |  |  
	| недавно плагин прикручивал. В нем стояла проверка браузера. Везде работало, кроме IE9. И вроде плагин серьезный, API все такое, но ребята не учли, что IE8 и IE9 работают по разному    Пришлось дебажить  
				__________________Чебурашка стал символом олимпийских игр. А чего достиг ты?
 Тишина - самый громкий звук
 			 Последний раз редактировалось nerv_, 16.09.2012 в 01:19.
 |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 01:20
			
			
			
		 |  
	| 
		
			
			| что-то знаю       |  | 
					Регистрация: 24.05.2009 
						Сообщений: 5,176
					 
		
 |  |  
	| 
	
 
	| Сообщение от stereomaniac1 |  
	| if (event.stopPropagation) { |  
	
 такой способ тоже менее производителен... так как на свойстве может висеть getter, а у функций/объектов происходит вызов toString поэтому лучше и более производительный вариант:
 
if ( "stopPropagation" in event ) {
}
 |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 10:54
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 26.03.2012 
						Сообщений: 823
					 
		
 |  |  
	| stereomaniac1,
 у "специалиста" уровень подачи знаний js очень низкий. И уже не актуальные подходы. Сам их смотрел..
 Если бы специалист преподавал по учебнику с этого сайта толку было бы больше!
 
 По поводу кроссбраузерности (имею в виду ie<9) не думаю что надо париться тем, кто сейчас приступает к изучению языка ИМХО. Так как с внедрением всяких вкусностей от html5 он просто утонет, если будет изучать как сделать какую-нибудь фитюльку, чтоб работала в старых ie!
 |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 11:32
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 22.03.2012 
						Сообщений: 3,744
					 
		
 |  |  
	| 
	
 
	| Сообщение от dmitry111 |  
	| Так как с внедрением всяких вкусностей от html5 он просто утонет, если будет изучать как сделать какую-нибудь фитюльку, чтоб работала в старых ie! |  
	
 полезный опыт имхо, хотя способен вызывать рвоту   |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 11:36
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 26.03.2012 
						Сообщений: 823
					 
		
 |  |  
	|  |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 11:46
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 22.03.2012 
						Сообщений: 3,744
					 
		
 |  |  
	| 
	
 
	| Сообщение от dmitry111 |  
	| уж проще тогда использовать jquery, хотя я где то слышал, что скоро и они перестанут поддерживать старых ослов |  
	
 о простоте речь не шла, речь шла об опыте эмуляции того, чего нет, с помощью того, что есть   |  |  
	| 
		
	| 
			
			 
			
				16.09.2012, 11:50
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.09.2012 
						Сообщений: 162
					 
		
 |  |  
	| dmitry111, с кроссбраузерностью нужно начинать париться с самого начала изучения javascript, чтобы не возникало иллюзий. Нужно сразу понять, что каждый делает свои браузеры со своими преферансом и барышнями. И то, что можно написать что-то кроссплатформенное - это тоже иллюзия. Тут и так мертвым грузом висят всякие ie, так еще и мобильные браузеры. У этого 3d трансформации уже есть, у этого canvas тормозит, а этот вообще мультитач никак не понимает... |  |  
 
 
 
 |  |