Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.02.2010, 15:46
Аватар для Cr@ZyBoY
Аспирант
Отправить личное сообщение для Cr@ZyBoY Посмотреть профиль Найти все сообщения от Cr@ZyBoY
 
Регистрация: 08.02.2010
Сообщений: 52

Забавный баг (фича?) в Chrome / Safari
Наткнулся на интересный баг (или не баг) хрома и сафари.
var addEvent = document.addEventListener || document.attachEvent;
addEvent("DOMNodeRemoved", function() {}, false);
addEvent("DOMAttrModified", function() {}, false);
addEvent("DOMNodeInserted", function() {}, false);
alert(true);

addEvent соответственно ставит на события изменения DOM какую-нибудь функцию (Mutation Events).
Код вроде как кросс-браузерный, но... Работает везде, кроме выше перечисленных браузеров, т.е. до alert дело вообще не доходит.
Выскакивает вот это: Uncaught TypeError: Illegal invocation
Кто-нибудь с таким сталкивался? А то Mutation Events нужны, но пока из-за них ничего не работает...
Ответить с цитированием
  #2 (permalink)  
Старый 22.02.2010, 15:51
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

this для addEventListener получается не document, а window
var addEvent = function(){
(document.addEventListener || document.attachEvent).apply(document, arguments)
}

Должно помочь.
Ответить с цитированием
  #3 (permalink)  
Старый 22.02.2010, 15:53
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Знакомая конструкция.... ща скажу откуда взял... из peppy.
Когда я это увидел сразу увидел этот баг. я выкрутился так:
var aEv = 'addEventListener'
aEv = doc[aEv]&&aEv || (aEv='attachEvent')&&doc[aEv]&&aEv;
doc[aEv]("DOMAttrModified", fn, false);
doc[aEv]("DOMNodeInserted", fn, false);
doc[aEv]("DOMNodeRemoved", fn, false);


Сообщение от subzey
(document.addEventListener || document.attachEvent).apply(document, arguments)
На сколько я помню и не раз расшибал лоб. у attachEvent функци нет методов .apply && .call в IE6
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт

Последний раз редактировалось PeaceCoder, 22.02.2010 в 15:59.
Ответить с цитированием
  #4 (permalink)  
Старый 22.02.2010, 15:57
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

PeaceCoder, код subzey поизящнее, не находите?
Ответить с цитированием
  #5 (permalink)  
Старый 22.02.2010, 15:58
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от e1f
не находите?
неа. я описал почему.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #6 (permalink)  
Старый 22.02.2010, 16:04
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

PeaceCoder,
Ухтыжка! И впрямь, нет! И прототипа нет. И присвоить
document.attachEvent.call = Function.call
нельзя.

Снимаю шляпу.
Ответить с цитированием
  #7 (permalink)  
Старый 22.02.2010, 16:09
Аватар для Cr@ZyBoY
Аспирант
Отправить личное сообщение для Cr@ZyBoY Посмотреть профиль Найти все сообщения от Cr@ZyBoY
 
Регистрация: 08.02.2010
Сообщений: 52

PeaceCoder,
вам и subzey плюсик в карму за помощь, спасибо
Ответить с цитированием
  #8 (permalink)  
Старый 22.02.2010, 16:13
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

PeaceCoder,
А разве для attachEvent мы type не должны через on указывать? В общем, если без ненужной бравады, то все равно выйдет что-то вроде
function addEvent(el, event, func) {
  if (el.addEventListener) {
    el.addEventListener(event, func, false);
  }
  else if (el.attachEvent) {
    el.attachEvent('on'+event, func);
  }
  else {
    el['on'+event] = func;
  }
};
Ответить с цитированием
  #9 (permalink)  
Старый 22.02.2010, 16:22
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от e1f
А разве для attachEvent мы type не должны через on указывать
Для этих типов вроде нет. Т.к. это события дерева, а не пользовательские.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #10 (permalink)  
Старый 22.02.2010, 16:36
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Да, если говорить о событиях aka DOMAttrModified -- в ИЕ же их нет, так? Вроде бы там onpropertychange.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странность при вычислении выражений.. Это баг или фича? krvwd Общие вопросы Javascript 9 28.01.2009 18:04