Зачем selection.getComposedRanges () сбой с ошибкой типа на iOSIOS

Программируем под IOS
Ответить
Anonymous
 Зачем selection.getComposedRanges () сбой с ошибкой типа на iOS

Сообщение Anonymous »

У меня есть редактор для использования в одностраничном приложении на основе веб -компонентов. Часть его функциональности состоит в том, чтобы прочитать текущий выбор, который обычно находится внутри редактируемого контента, где -то встроено где -то внутри иерархии веб -компонентов.

Код: Выделить всё

    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;
}
}

< /code>
Это, похоже, достоверно предоставляет редактору список теневых корнов в иерархии.  Я должен сделать это, я попытался просто предоставить корень тени выше этого ._ROOT 
, но выборы затем вернули startContainer в качестве элемента более высокой иерархии
Редактор предоставляет метод (метод (метод (метод

Код: Выделить всё

getSelection
) Какой код по всему приложению может вызвать, чтобы узнать, что выбирается в настоящее время. Похоже:-< /p>

Код: Выделить всё

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;
}
}
Когда я запускаю это в iOS (iPad Pro), используя Chrome с консоли. Log, который захватывается Chrome: // Проверка В следующей вкладке я могу ясно видеть, что иногда (не всегда) этот Selection.getComposedRanges ({Shadowroots: this.shadows}) tripseRror. Я отсканировал спецификацию, но могу найти заявление сейчас, в котором говорится, что эта функция когда -либо должна бросить ее. < /P>
Что здесь происходит? Что означает TypeError?
(Примечание: на рабочем столе Chrom>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ror-on-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»