Чтобы справиться с этим, во время инициализации редактора я создаю список теневых корней в иерархии веб-приложений (корень — это параметр, определяющий элемент, контент которого доступен для редактирования)
Код: Выделить всё
this._root = root;
this._shadows = [];
let possibleShadow = this._root
while (possibleShadow !== document.body) {
if (possibleShadow.nodeType === 11) {
if(possibleShadow.host) {
this._shadows.push(possibleShadow);
possibleShadow = possibleShadow.host;
} else {
break;
}
} else {
possibleShadow = possibleShadow.parentNode;
}
}
Редактор предоставляет метод (
Код: Выделить всё
getSelectionКод: Выделить всё
getSelection() {
const selection = window.getSelection();
let range = document.createRange();
if (selection.rangeCount > 0) {
console.log('shadows length', this._shadows.length);
try {
const ranges = selection.getComposedRanges({shadowRoots: this._shadows})
console.log('got ranges length', ranges.length );
range.setStart(ranges[0].startContainer, ranges[0].startOffset);
range.setEnd(ranges[0].endContainer, ranges[0].endOffset);
console.log('get compsed range', range);
} catch(error) {
console.log ('errored in getComposedRanges with', error, 'stack', error.stack);
}
} else {
console.log('make new range for selection')
range.setStart(this._root,0);
range.setEnd(this._root, 0);
selection.setBaseAndExtent(
range.startContainer,
range.startOffset,
range.endContainer,
range.endOffset
);
}
return range;
}
}
Что здесь происходит? Что означает typeError?
(ПРИМЕЧАНИЕ. На рабочем столе Chrome под Linux все работает отлично)
Подробнее здесь: https://stackoverflow.com/questions/797 ... ror-on-ios
Мобильная версия