ASP.NET 部分回发上的 Chrome 自动填充(更新面板)

Posted

技术标签:

【中文标题】ASP.NET 部分回发上的 Chrome 自动填充(更新面板)【英文标题】:Chrome Autofill on ASP.NET Partial Postback (Update Panel) 【发布时间】:2019-02-27 17:10:13 【问题描述】:

我知道有很多关于网络浏览器的自动完成和自动填充的问题和答案。我还没有看到有人提出过这个具体问题。

更新:当部分回发在更新面板内执行时,自动填充特别发生

最近,(Chrome 版本 70+?),Chrome 已开始在执行部分回发时积极地自动填充我们的 web 应用程序中的输入字段。 (我们使用 asp.net 网络表单)

我们使用部分回发来动态加载用户控件并将其添加到更新面板内的 DOM 中。

具体来说,像以下简单的 sn-p 这样的输入正在填充电子邮件:

<input type="search" class="newH4" placeholder="Search">

我尝试添加具有不同值的自动完成属性无济于事。

这是自动填充的截图:

此外,我还有其他字段,例如输入与电子邮件一起填充的美元金额。有没有办法在最新版本的 chrome 上防止这种情况发生?

【问题讨论】:

【参考方案1】:

如果您的表单中有密码字段,您可以添加此属性 - autocomplete="new-password"

<input type="password" placeholder="Password" autocomplete="new-password">

【讨论】:

【参考方案2】:

autocomplete="off" 应该可以正常工作,但如果它不是密码或电子邮件,你可以给它一些随机字符串,看看是否有帮助

例如autocomplete="rjftgh"

【讨论】:

【参考方案3】:

注意:简单地将自动完成属性更改为随机字符串,甚至像“新密码”这样的特殊字符串都不适用于此问题。

最终我找到了解决方案。它更像是一种 hack,所以我对它不太满意,但它来自 Mike Nelson 对以下问题的回答:Disabling Chrome Autofill

他的解决方案包括在自动填充的输入上方添加显示属性设置为“无”的输入元素。这个想法是这些隐藏字段吸收自动填充。

我也确实了解了更多关于 ASP.NET 和更新面板的问题。当更新面板触发部分回发时,它使用 AJAX 库。库与服务器联系以完成更新。 无论 AJAX 在后台做什么,它都会触发 chrome 的自动填充逻辑重新执行。 换句话说,每当我动态添加用户控件时,该用户控件的 html 结构中的第一个输入字段都会被自动填充与用户存储的电子邮件。

同样,非常奇怪和糟糕的行为,但显示“无”输入字段起到了作用。

如果 Chrome 再次更改其自动填充逻辑(他们会),我将更新我的答案,希望有更好的解决方案。

【讨论】:

以上是关于ASP.NET 部分回发上的 Chrome 自动填充(更新面板)的主要内容,如果未能解决你的问题,请参考以下文章

在没有回发的情况下重置 ASP.NET 中的页面

asp .net背景图像在回发时闪烁

ASP.net 回发 - 滚动到特定位置

在 asp.net 中执行回发操作后刷新页面

ASP .NET单页上的多个用户控件 - 回发问题

如何在 ASP 中制作自动回发多选列表框?