Skip to content

Commit ee0382e

Browse files
[fixed] Use .ownerDocument instead of root document
Event listeners are attached to the component DOM node's owner document instead of to the window root document. The two are not the same when the component is mounted inside an IFrame, for example using react-frame-component [1]. [1] https://github.com/ryanseddon/react-frame-component
1 parent 560b0e8 commit ee0382e

File tree

6 files changed

+12
-10
lines changed

6 files changed

+12
-10
lines changed

src/AffixMixin.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ const AffixMixin = {
104104
this._onWindowScrollListener =
105105
EventListener.listen(window, 'scroll', this.checkPosition);
106106
this._onDocumentClickListener =
107-
EventListener.listen(document, 'click', this.checkPositionWithEventLoop);
107+
EventListener.listen(React.findDOMNode(this).ownerDocument, 'click', this.checkPositionWithEventLoop);
108108
},
109109

110110
componentWillUnmount() {

src/DropdownStateMixin.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,12 @@ const DropdownStateMixin = {
5656
},
5757

5858
bindRootCloseHandlers() {
59+
let doc = React.findDOMNode(this).ownerDocument;
60+
5961
this._onDocumentClickListener =
60-
EventListener.listen(document, 'click', this.handleDocumentClick);
62+
EventListener.listen(doc, 'click', this.handleDocumentClick);
6163
this._onDocumentKeyupListener =
62-
EventListener.listen(document, 'keyup', this.handleDocumentKeyUp);
64+
EventListener.listen(doc, 'keyup', this.handleDocumentKeyUp);
6365
},
6466

6567
unbindRootCloseHandlers() {

src/FadeMixin.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default {
5757

5858
componentWillUnmount: function () {
5959
let els = getElementsAndSelf(React.findDOMNode(this), ['fade']),
60-
container = (this.props.container && React.findDOMNode(this.props.container)) || document.body;
60+
container = (this.props.container && React.findDOMNode(this.props.container)) || React.findDOMNode(this).ownerDocument.body;
6161

6262
if (els.length) {
6363
this._fadeOutEl = document.createElement('div');

src/Modal.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,9 @@ const Modal = React.createClass({
128128

129129
componentDidMount() {
130130
this._onDocumentKeyupListener =
131-
EventListener.listen(document, 'keyup', this.handleDocumentKeyUp);
131+
EventListener.listen(React.findDOMNode(this).ownerDocument, 'keyup', this.handleDocumentKeyUp);
132132

133-
let container = (this.props.container && React.findDOMNode(this.props.container)) || document.body;
133+
let container = (this.props.container && React.findDOMNode(this.props.container)) || React.findDOMNode(this).ownerDocument.body;
134134
container.className += container.className.length ? ' modal-open' : 'modal-open';
135135

136136
if (this.props.backdrop) {
@@ -146,7 +146,7 @@ const Modal = React.createClass({
146146

147147
componentWillUnmount() {
148148
this._onDocumentKeyupListener.remove();
149-
let container = (this.props.container && React.findDOMNode(this.props.container)) || document.body;
149+
let container = (this.props.container && React.findDOMNode(this.props.container)) || React.findDOMNode(this).ownerDocument.body;
150150
container.className = container.className.replace(/ ?modal-open/, '');
151151
},
152152

src/OverlayMixin.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,6 @@ export default {
6363
},
6464

6565
getContainerDOMNode() {
66-
return React.findDOMNode(this.props.container || document.body);
66+
return React.findDOMNode(this.props.container || React.findDOMNode(this).ownerDocument.body);
6767
}
6868
};

src/utils/domUtils.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ function getOffset(DOMNode) {
2121
return window.jQuery(DOMNode).offset();
2222
}
2323

24-
let docElem = document.documentElement;
24+
let docElem = DOMNode.ownerDocument.documentElement;
2525
let box = { top: 0, left: 0 };
2626

2727
// If we don't have gBCR, just use 0,0 rather than error
@@ -89,7 +89,7 @@ function getPosition(elem, offsetParent) {
8989
* @returns {HTMLElement}
9090
*/
9191
function offsetParentFunc(elem) {
92-
let docElem = document.documentElement;
92+
let docElem = elem.ownerDocument.documentElement;
9393
let offsetParent = elem.offsetParent || docElem;
9494

9595
while ( offsetParent && ( offsetParent.nodeName !== 'HTML' &&

0 commit comments

Comments
 (0)