android开发日常总结

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");

结论

山穷水复疑无路,柳岸花明又一村。 (陶渊明)

上一篇 下一篇

猜你喜欢

热点阅读