MCPcopy Create free account
hub / github.com/debbide/GeoFill / simulateInput

Function simulateInput

scripts/content.js:172–203  ·  view source on GitHub ↗

* 模拟用户输入(增强版,支持 React/Vue 等框架)

(element, value)

Source from the content-addressed store, hash-verified

170 * 模拟用户输入(增强版,支持 React/Vue 等框架)
171 */
172function simulateInput(element, value) {
173 // 聚焦元素
174 element.focus();
175
176 // 对于 React 等框架,需要使用原生 setter
177 const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
178 window.HTMLInputElement.prototype, 'value'
179 )?.set;
180
181 const nativeTextAreaValueSetter = Object.getOwnPropertyDescriptor(
182 window.HTMLTextAreaElement.prototype, 'value'
183 )?.set;
184
185 // 清空并设置值
186 if (element.tagName.toLowerCase() === 'textarea' && nativeTextAreaValueSetter) {
187 nativeTextAreaValueSetter.call(element, value);
188 } else if (nativeInputValueSetter) {
189 nativeInputValueSetter.call(element, value);
190 } else {
191 element.value = value;
192 }
193
194 // 触发各种事件以确保表单验证和框架状态更新
195 element.dispatchEvent(new Event('input', { bubbles: true, cancelable: true }));
196 element.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
197 element.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, key: 'a' }));
198 element.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true, key: 'a' }));
199 element.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, key: 'a' }));
200
201 // 失焦触发验证
202 element.blur();
203}
204
205/**
206 * 处理 select 元素(增强版)

Callers 2

fillFormFunction · 0.85
fillFormSmartFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected