主题:
我正在创建一个 Google Chrome 扩展程序,它通过内容脚本和事件页面与网页交互。
如果用户单击editable
按chrome.contextMenus
API分类的元素,我会显示上下文菜单选项。
这些选项就像常用输入文本的快捷方式。当用户单击一个选项时,一些文本会放置在光标位置的元素内。如果用户突出显示了文本,则将其删除。
问题:
并非所有可编辑元素都可以以相同方式修改。
如果元素是简单textarea
的,则可以通过实施此解决方案来实现所需的结果:
但是,我不能假设我正在与正常的textarea
.
可能的细微差别包括:
文本区域隐藏在 中
Iframe
,这使查找要与之交互的元素的过程变得复杂(document.activeElement
可能返回Iframe
,而不是实际包含文本的元素)。该
<textarea>
不会是一个<textarea>
/<input>
所有,而是一个contentEditable <div>
。.value
在这种情况下,该方法将不起作用。
所以我正在寻找一种灵活的方法来做到这一点,它可以优雅地处理所有边缘情况。
我尝试过的一些解决方案:
- 选项 1:
我最初计划将值存储在系统剪贴板中。然后,我可以想象只是document.execCommand('paste')
用来修改元素。但是,在尝试之后,这种方法似乎与我最初的方法具有相同的缺点。(见这个问题)
此外,这种方法会在操作之前删除剪贴板中的任何内容。这是不可取的,任何使用这种方法的解决方案都必须提供解决方法。 - 选项 2:
我考虑过的另一个选项是为字符串中的每个字符调度键盘事件。但是,使用此解决方案,您仍然会遇到Iframe
问题,并且它不允许您使用特殊的 Unicode 字符。┻━┻ ︵ヽ(`Д´)ノ︵ ┻━┻