Skip to content

Commit 84b4505

Browse files
committed
Make touch* event handlers explicitly passive: false in renderer #1702
- Test for passive event / options object for `addEventListener()` support - Supported browsers have all options set explicitly in the object - Unsupported browsers just use the `useCapture` boolean
1 parent 4f06ba3 commit 84b4505

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

src/extensions/renderer/base/load-listeners.js

+29-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,35 @@ BRp.registerBinding = function( target, event, handler, useCapture ){
1717
BRp.binder = function( tgt ){
1818
var r = this;
1919

20-
var on = function(){
21-
var args = arguments;
20+
var tgtIsDom = tgt === window || tgt === document || tgt === document.body || is.domElement( tgt );
21+
22+
if( r.supportsPassiveEvents == null ){
23+
24+
// from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection
25+
var supportsPassive = false;
26+
try {
27+
var opts = Object.defineProperty( {}, 'passive', {
28+
get: function(){
29+
supportsPassive = true;
30+
}
31+
} );
32+
33+
window.addEventListener( 'test', null, opts );
34+
} catch( err ){}
35+
36+
r.supportsPassiveEvents = supportsPassive;
37+
}
38+
39+
var on = function( event, handler, useCapture ){
40+
var args = Array.prototype.slice.call( arguments );
41+
42+
if( tgtIsDom && r.supportsPassiveEvents ){ // replace useCapture w/ opts obj
43+
args[2] = {
44+
capture: useCapture != null ? useCapture : false,
45+
passive: false,
46+
once: false
47+
};
48+
}
2249

2350
r.bindings.push({
2451
target: tgt,

0 commit comments

Comments
 (0)