@@ -7,8 +7,7 @@ export const RESIZE_DETECTOR = Symbol('ResizeDetector');
7
7
@PURE
8
8
@themr ( RESIZE_DETECTOR )
9
9
export default class ResizeDetector extends React . Component {
10
-
11
- _resizeDetector ;
10
+ _object ;
12
11
13
12
static propTypes = {
14
13
theme : React . PropTypes . shape ( {
@@ -18,23 +17,42 @@ export default class ResizeDetector extends React.Component {
18
17
}
19
18
20
19
componentDidMount ( ) {
21
- this . _resizeDetector . contentWindow . addEventListener ( 'resize' , this . onResize ) ;
20
+ this . _object . contentDocument . defaultView . addEventListener ( 'resize' , this . onResize ) ;
22
21
}
23
22
24
23
componentWillUnmount ( ) {
25
- this . _resizeDetector . contentWindow . removeEventListener ( 'resize' , this . onResize ) ;
26
- delete this [ '_resizeDetector ' ] ;
24
+ this . _object . contentDocument . defaultView . removeEventListener ( 'resize' , this . onResize ) ;
25
+ delete this [ '_object ' ] ;
27
26
}
28
27
29
28
render ( ) {
29
+ const style = {
30
+ display : 'block' ,
31
+ position : 'absolute' ,
32
+ top : 0 ,
33
+ left : 0 ,
34
+ height : '100%' ,
35
+ width : '100%' ,
36
+ overflow : 'hidden' ,
37
+ pointerEvents : 'none' ,
38
+ zIndex : '-1'
39
+ } ;
30
40
const { theme} = this . props ;
41
+
31
42
return (
32
- < iframe src = "about:blank" ref = { el => this . _resizeDetector = el } className = { theme . container } />
43
+ < object style = { style } type = "text/html" ref = { el => this . _object = el } data = "about: blank"
44
+ className = { theme . container } />
33
45
) ;
34
46
}
35
47
36
48
onResize = ( event ) => {
37
- const { onResize} = this . props ;
38
- onResize && onResize ( event ) ;
49
+ const win = event . target || event . srcElement ;
50
+ if ( win . __resizeRAF__ ) {
51
+ cancelAnimationFrame ( win . __resizeRAF__ ) ;
52
+ }
53
+ win . __resizeRAF__ = requestAnimationFrame ( ( ) => {
54
+ const { onResize} = this . props ;
55
+ onResize && onResize ( event ) ;
56
+ } ) ;
39
57
}
40
58
}
0 commit comments