我的分机有一个带有项目的上下文菜单。我希望它做的是:当我右键单击 editable
html元素(例如input或textarea),然后选择并单击我的菜单中的一个项目-一些由我的扩展名定义的值被输入到输入中。
现在我已经意识到这一点 document.activeElement.value = myValue
.
只需简单的输入,就可以正常工作。
当有自定义的输入时,问题就开始了 onChange
事件处理,例如日历或电话输入,或货币输入-以某种方式转换用户输入。
因为我直接在元素上设置了一个值,所以忽略了处理逻辑,这会导致各种各样的问题。
既然javascript不允许类似keysend的特性,那么我的选项是什么?
我曾经考虑过像Puppeter或cypress这样的测试工具,但它们似乎都无法打包到扩展中。Puppeter确实有这样一个选项,但它仍然需要运行一个节点示例来连接。我希望我的扩展是完全客户端的,并分布在ChromeWebStore中,所以我不能要求我的用户运行一个节点服务器。
1条答案
按热度按时间egmofgnx1#
有一个内置的dom方法document.execcommand。
如果是扩展,请在内容脚本中使用此代码。
请注意,execcommand在2020年被标记为过时,但在可预见的未来它将工作,因为新的编辑api规范尚未完成,要知道这些东西通常运行得有多慢,可能还需要5-20年的时间。
它模拟用户对当前关注的dom元素的物理输入,因此将触发所有必要的事件(如
beforeinput
,input
)与isTrusted
字段设置为true。在一些页面上change
事件应该如上图所示进行额外调度。您可能希望选择当前文本以完全替换它,而不是附加: