>问题
我正在尝试使用 Chrome 扩展程序扩展网络应用程序。现在,我需要在 Web 应用程序中自动执行一个步骤。在该步骤中,Web 应用有一个禁用按钮,并要求输入特定字符串。我能够使用以下方法输入字符串:
// Let's say the input element is in the input variable.
input.value = "required string"
它不会启用该按钮。仅当我手动输入输入框时,它才会起作用。我尝试调试,应用程序正在使用 jQuery 监视keyup
事件。现在,由于未触发该事件,因此未启用它是有道理的。
我试过什么?
我尝试使用以下方法伪造键盘事件:
input.dispatchEvent(new KeyboardEvent('keyup', {'key':'KEY_HERE'}));
但它不会被输入捕获,并且按钮保持禁用状态。我也尝试了input.focus()
和input.select()
等来吸引焦点,因为这是我在一些地方发现的。但这也没有用。
我不确定我在这里错过了什么,或者这是否可能。
按以下方式调度按键,
input.dispatchEvent(new KeyboardEvent('keyup', {'key':'KEY_HERE'}));
或者按照@wOxxOm描述使用execCommand
,不会调度在标签中物理键入某些内容<input/>
附带的所有事件。
因此,如果您有类似的用例,则需要确定应用程序正在监视/捕获的事件,并单独调度该事件。对我来说,在简单地设置值后调度一个change
事件对我有用。
input.value = "required string";
input.dispatchEvent(
new Event('change', {
bubbles: true,
cancelable: true,
}))
input
事件是另一个常用的事件。