截至 2016 年 7 月 8 日的工作答复
亚当正确地指出这是一个错误(或预期的行为)。然而,之前的答案都没有真正说明如何解决这个问题,所以这里有一种方法可以强制 Chrome 将自动完成的值视为真实值。
有几件事需要按顺序发生,这需要只在 Chrome 而不是 Firefox 中运行,因此if
.
首先我们关注元素。然后我们创建一个 newTextEvent
和 run initTextEvent
,它将我们指定的自定义字符串(我使用“@@@@@”)添加到值的开头。这会触发 Chrome 实际上开始表现得好像值是真实的。然后我们可以删除我们添加的自定义字符串,然后我们取消焦点。
代码:
input.focus();
var event = document.createEvent('TextEvent');
if ( event.initTextEvent ) {
event.initTextEvent('textInput', true, true, window, '@@@@@');
input.dispatchEvent(event);
input.value = input.value.replace('@@@@@','');
}
input.blur();
编辑 2016 年 8 月 10 日
这仅适用于 Windows 和 Android 上的 Chrome。不适用于 OSX。此外,根据以下信息,它将在 2016 年 9 月完全停止工作:
https://www.chromestatus.com/features/5718803933560832
另外,我开了一张 Chromium 票。
https://bugs.chromium.org/p/chromium/issues/detail?id=636425
截至 8 月 12 日,Chrome 团队的一名成员在上述工单上表示,行为不会改变,因为他们不认为这是一个错误。
长期解决建议:
也就是说,从第一次实施时起,当前的行为就已经进行了调整。用户不再需要与要报告的值的密码输入进行交互。用户现在只需要与页面的任何部分进行交互(发送鼠标或键盘事件)。这意味着虽然在页面加载上运行验证仍然不起作用,但单击提交按钮将导致 Chrome 正确报告密码值。解决方法是在提交时重新验证所有可能会自动完成的输入(如果这是您尝试执行的操作)。
2016 年 12 月 13 日编辑:
一张新的 Chromium 票已经打开,并且收到的效果更好。如果有兴趣改变 Chrome 的这种行为,请在这张新票上加注星标:
https://bugs.chromium.org/p/chromium/issues/detail?id=669724