Skip to content

Commit 4875d01

Browse files
committed
Adapt getSelection to use node’s window object
1 parent e1d4110 commit 4875d01

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

packages/react-dom/src/client/ReactDOMSelection.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ var {TEXT_NODE} = require('../shared/HTMLNodeType');
1616
* @return {?object}
1717
*/
1818
function getModernOffsets(outerNode) {
19-
var selection = window.getSelection && window.getSelection();
19+
var win = window;
20+
if (outerNode.ownerDocument && outerNode.ownerDocument.defaultView) {
21+
win = outerNode.ownerDocument.defaultView;
22+
}
23+
var selection = win.getSelection && win.getSelection();
2024

2125
if (!selection || selection.rangeCount === 0) {
2226
return null;
@@ -153,11 +157,16 @@ function getModernOffsetsFromPoints(
153157
* @param {object} offsets
154158
*/
155159
function setModernOffsets(node, offsets) {
156-
if (!window.getSelection) {
160+
var win = window;
161+
if (node.ownerDocument && node.ownerDocument.defaultView) {
162+
win = node.ownerDocument.defaultView;
163+
}
164+
165+
if (!win.getSelection) {
157166
return;
158167
}
159168

160-
var selection = window.getSelection();
169+
var selection = win.getSelection();
161170
var length = node[getTextContentAccessor()].length;
162171
var start = Math.min(offsets.start, length);
163172
var end = offsets.end === undefined ? start : Math.min(offsets.end, length);

packages/react-dom/src/events/SelectEventPlugin.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,20 @@ function getSelection(node) {
7171
start: node.selectionStart,
7272
end: node.selectionEnd,
7373
};
74-
} else if (window.getSelection) {
75-
var selection = window.getSelection();
76-
return {
77-
anchorNode: selection.anchorNode,
78-
anchorOffset: selection.anchorOffset,
79-
focusNode: selection.focusNode,
80-
focusOffset: selection.focusOffset,
81-
};
74+
} else {
75+
var win = window;
76+
if (node.ownerDocument && node.ownerDocument.defaultView) {
77+
win = node.ownerDocument.defaultView;
78+
}
79+
if (win.getSelection) {
80+
var selection = win.getSelection();
81+
return {
82+
anchorNode: selection.anchorNode,
83+
anchorOffset: selection.anchorOffset,
84+
focusNode: selection.focusNode,
85+
focusOffset: selection.focusOffset,
86+
};
87+
}
8288
}
8389
}
8490

0 commit comments

Comments
 (0)