Skip to content

Commit 6cef91b

Browse files
committed
resize detector based on object instead iframe
1 parent 314d216 commit 6cef91b

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

src/components/ResizeDetector/ResizeDetector.jsx

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ export const RESIZE_DETECTOR = Symbol('ResizeDetector');
77
@PURE
88
@themr(RESIZE_DETECTOR)
99
export 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

Comments
 (0)