Обнаружил интересную фичу - подписку на события с указанием passsive: true, что должно позволить браузеру оптимизировать стандратные действия, т. к. мы таким образом обещаем не отменять их.
С точки зрения логики это дополнительная плюшка, которая не должна ничего портить в случае, если браузер её не поддерживает. Но есть одно жирное НО.
В классическом варианте подписка осуществлялась одним из этих способов:
target.addEventListener(type, listener);
target.addEventListener(type, listener, useCapture);
Теперь же надо в третий параметр запихнуть объект:
target.addEventListener(type, listener, {useCapture, passive, once});
Тут есть ещё и once, у которого поддержка ещё хуже.
Какие проблемы могут возникнуть, если передать объект в качестве последнего параметра, когда браузер не поддерживает passive?
Следующий код в IE11 выдаёт 1, т. е. capturing, а в хроме 3 - bubbling. Логично ли рассчитывать, что объект будет рассматриваться как true, что означает, что если я подписываюсь на capturing-стадию и не использую once, то всё будет работать одинаково?
Или есть другие варианты, например исключение?
https://jsfiddle.net/5o88hq7u/1/
document.querySelector('div').addEventListener(
'click',
function(e) { alert(e.eventPhase) },
{ passive: true }
);
<div><button>Click me</button></div>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей