@@ -7,8 +7,7 @@ export const RESIZE_DETECTOR = Symbol('ResizeDetector');
77@PURE
88@themr ( RESIZE_DETECTOR )
99export default class ResizeDetector extends React . Component {
10-
11- _resizeDetector ;
10+ _object ;
1211
1312 static propTypes = {
1413 theme : React . PropTypes . shape ( {
@@ -18,23 +17,42 @@ export default class ResizeDetector extends React.Component {
1817 }
1918
2019 componentDidMount ( ) {
21- this . _resizeDetector . contentWindow . addEventListener ( 'resize' , this . onResize ) ;
20+ this . _object . contentDocument . defaultView . addEventListener ( 'resize' , this . onResize ) ;
2221 }
2322
2423 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 ' ] ;
2726 }
2827
2928 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+ } ;
3040 const { theme} = this . props ;
41+
3142 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 } />
3345 ) ;
3446 }
3547
3648 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+ } ) ;
3957 }
4058}
0 commit comments