我正在构建一个基于 Web 的注释工具,最终用户可以在其中从 HTML 文档中选择和注释一段文本。从编程上讲,使用“window.getSelection”和“getRangeAt”可以直接访问和使用选定的文本和相应的范围。
但是,当我尝试将所有这些放在一个跨浏览器应用程序中时,我遇到了一个问题。在 Firefox 中一切正常,但在 Safari 中,我立即注意到,当我单击 HTML 按钮(即“注释”按钮)时,当前用户文本选择消失,好像单击按钮重新定位了文本插入符号。我尝试访问 window.getSelection 的代码从该按钮中的脚本执行,然后报告不存在任何选择。
我深入研究了谷歌文档,特别是他们的文字处理应用程序是如何处理这个问题的,因为本质上选择文本和单击“粗体”或“更改字体”的行为和机制对应于我的注释功能。在 Google Docs 中,他们将要编辑的文档文本加载到 iframe 中。通过玩这个,我了解到 Firefox 开箱即用支持在包含多个框架或 iframe 的网页中进行多个选择范围。换句话说,我可以在基本页面中选择一段文本,并在 iframe 中选择一段单独的文本,而第一个选择不会消失。这个 Google Docs 解决方案适用于 Firefox 和 Safari(我感兴趣的两种浏览器)。但是当我构建一个简单的示例页面来测试这个解决方案时,它在 Safari 中不起作用。
任何人都知道我在这里缺少什么才能使其正常工作吗?或者有另一种方法来让它工作的建议?