Я создаю веб-инструмент для аннотаций, в котором конечные пользователи могут выбирать и комментировать раздел текста из HTML-документа. Программно говоря, получить доступ к выбранному тексту и соответствующему диапазону и работать с ним просто, используя "window.getSelection" и "getRangeAt".
Однако я сталкиваюсь с проблемой, когда пытаюсь собрать все это вместе в кросс-браузерном приложении. Все работает, как в Firefox, но в Safari я сразу заметил, что когда я нажимаю кнопку HTML (то есть кнопку «аннотация»), выделение текущего текста пользователя исчезает, как будто нажатие кнопки изменяет положение текстовой каретки. Мой код, который пытается получить доступ к window.getSelection, выполняется из скрипта в этой кнопке, который затем сообщает, что выбор не существует.
Я покопался и взглянул на то, как Google Docs, в частности их приложение для обработки текста, справляется с этим, поскольку по сути поведение и механизм выделения текста и нажатия «Жирный шрифт» или «Изменить шрифт» соответствуют моей функции аннотации. В Google Docs они загружают текст документа для редактирования в iframe. Поэкспериментировав с этим, я узнал, что Firefox из коробки поддерживает несколько диапазонов выбора на веб-странице, содержащей несколько фреймов или фреймов. Другими словами, я могу выбрать раздел текста на базовой странице и отдельный раздел текста в iframe без исчезновения первого выделения. Это решение Google Docs работает как для Firefox, так и для Safari (двух браузеров, которые меня интересуют). Но когда я создал простую страницу примера для тестирования этого решения, в Safari это не сработало. Как только я нажимаю кнопку или выбираю текст на корневой странице (вне рамки iframe), текущий выбранный текст iframe исчезает.
Кто-нибудь знает, что мне здесь не хватает, чтобы заставить это работать? Или есть предложение по другому способу заставить это работать?