Javascript注入表单信息的正确处理方式
2023-09-27 本文已影响0人
aitality
熟悉
JS
的都知道,表单注入就是简单的一句话:inputElement.value="test"
,可是有时候这样设置并没有触发提交按钮
状态的校验。只有手动改变输入框内容才能正常提交表单,这个问题困扰了我很久。不过终于解决了。
-_-嘿嘿 -_-
常用注入方式很简单,就下面一句话,缺点呢也很明显,就是无法触发change
事件。
inputElement.value="test"
正确的注入方式,看着复杂,但是确保可以触发change
事件。
function fill_form_input (element, value){
const valueSetter = Object.getOwnPropertyDescriptor(element, 'value').set;
const prototype = Object.getPrototypeOf(element);
const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
if (valueSetter && valueSetter !== prototypeValueSetter) {
prototypeValueSetter.call(element, value);
} else {
valueSetter.call(element, value);
}
element.dispatchEvent(new Event('input', { bubbles: true }));
}
//使用例子
fill_form_input(inputElement, "test");
结论
山穷水复疑无路,柳岸花明又一村。 (陶渊明)