Забавный баг (фича?) в 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 нужны, но пока из-за них ничего не работает... |
this для addEventListener получается не document, а window
var addEvent = function(){ (document.addEventListener || document.attachEvent).apply(document, arguments) } Должно помочь. |
Знакомая конструкция.... ща скажу откуда взял... из 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); Цитата:
|
PeaceCoder, код subzey поизящнее, не находите? ;)
|
Цитата:
|
PeaceCoder,
Ухтыжка! И впрямь, нет! И прототипа нет. И присвоить document.attachEvent.call = Function.callнельзя. Снимаю шляпу. |
PeaceCoder,
вам и subzey плюсик в карму за помощь, спасибо :) |
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; } }; |
Цитата:
|
Да, если говорить о событиях aka DOMAttrModified -- в ИЕ же их нет, так? Вроде бы там onpropertychange.
|
Часовой пояс GMT +3, время: 08:11. |