禁用 Safari 自动填充用户名和密码

新手上路,请多包涵

您可能已经知道,Safari 有一个讨厌的自动填充错误,无论您是否设置 autocomplete="off" ,它都会填充电子邮件、用户名和密码字段。

这是一个基本形式:

 <form action="/" method="post">
    <p>
        <label>E-mail</label>
        <input type="text" name="email" value="" />
    </p>
    <p>
        <label>Password</label>
        <input type="password" name="password" value="" />
    </p>
</form>

…Safari 在页面加载时自动填充这些字段,就像它应该的那样,做得好!

如果将 autocomplete="off" 放入字段和/或表单元素,Safari 仍会自动填充这些字段:

 <form action="/" method="post" autocomplete="off">
    <p>
        <label>E-mail</label>
        <input type="text" name="email" value="" autocomplete="off" />
    </p>
    <p>
        <label>Password</label>
        <input type="password" name="password" value="" autocomplete="off" />
    </p>
</form>

即使这样也行不通:

 <form action="/" method="post" autocomplete="off">
    <p>
        <label>E-mail</label>
        <input type="text" name="secretfield1" value="" autocomplete="off"/>
    </p>
    <p>
        <label>Password</label>
        <input type="password" name="secretfield2" value="" autocomplete="off" />
    </p>
</form>

…因为 Safari 查找那些 <label> 元素,如果它们包含单词“电子邮件”、“密码”等,并继续自动填充。

Aaaahhhhha!,我想,并尝试了这个:

 <form action="/" method="post" autocomplete="off">
    <p>
        <label>%REPLACE_EMAIL_TITLE%</label>
        <input type="text" name="%REPLACE_EMAIL_NAME%" value="" autocomplete="off"/>
    </p>
    <p>
        <label>%REPLACE_PASSWORD_TITLE%</label>
        <input type="password" name="%REPLACE_PASSWORD_NAME%" value="" autocomplete="off" />
    </p>
</form>

…并使用 JavaScript 将 %TAGS% 替换为真实姓名。 Safari 自动填充启动。无论您是否在替换时设置 10 秒超时。

那么,这真的是唯一的选择吗?

 <form action="/" method="post" autocomplete="off">
    <p>
        <label>That electronic postal address we all use, but can't write the title here because Safari fills this with YOUR information if you have autofill turned on</label>
        <input type="text" name="someelectronicpostaladdress" value="" autocomplete="off"/>
    </p>
    <p>
        <label>A set of characters, letters, numbers and special characters that is so secret that only you or the user you are changing it for knows, but can't write the title here because Safari sucks</label>
        <input type="password" name="setofseeecretcharacters" value="" autocomplete="off" />
    </p>
</form>

我希望不是?

更新: @skithund 在 Twitter 中指出Safari 正在获得 4.0.3 更新,其中提到了“登录自动填充”。有谁知道该更新是否会解决此问题?

原文由 Jari 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 694
1 个回答

浏览器忽略 autocomplete=off 的原因是因为有些网站试图禁用自动完成密码。

那是错的。

2014 年 7 月,Firefox 是最后一个最终实施更改以忽略任何试图关闭密码自动完成的网站的主要浏览器。

用户对我们的 HTML 表单自动完成功能的最大抱怨之一是 “它不起作用——我没有看到我之前输入的任何文本。” 在调试此类情况时,我们通常会发现该站点使用提供的属性明确禁用了该功能,但是当然,用户不知道该站点已经这样做,并且简单地认为 IE 存在错误。根据我的经验,当功能被隐藏或替换时,用户通常会责怪浏览器,而不是网站。

任何网站试图规避浏览器偏好的任何尝试都是错误的,这就是浏览器忽略它的原因。没有理由知道为什么网站应该尝试禁用密码保存。

  • Chrome 忽略它
  • Safari 忽略它
  • IE忽略它
  • Firefox 忽略它

在这一点上,Web 开发人员通常会抗议 “但我不会在所有地方都这样做——只会在有意义的一小部分!” 不幸的是,即使那是真的,这也是另一种情况,浏览器真的无法区分它们。请记住,弹出窗口曾经是 Web 浏览体验中令人愉快、有用的部分,直到它们被广告商滥用使它们成为各地用户的祸根。不可避免地,所有浏览器都开始阻止弹出窗口,甚至打破了使用弹出窗口的良好品味和判断力的“好”网站。

如果我是特殊的 雪花 呢?

有人提出了一个很好的用例:

我有一台共享的公共区域信息亭式计算机。我们不希望有人(无意或有意)保存他们的密码,以便下一个用户可以使用它。

这并不违反声明:

任何网站试图规避浏览器偏好的行为都是错误的

这是因为在共享信息亭的情况下:

  • 它不是具有古怪策略的 网络服务器
  • 它是具有古怪策略的客户端 用户代理

浏览器(共享计算机)要求 尝试保存密码。

防止 浏览器 保存密码的正确方法

就是设置 浏览器 不保存密码。

由于您已锁定并控制此信息亭计算机:您可以控制设置。这包括保存密码的选项。

在 Chrome 和 Internet Explorer 中,您可以使用组策略(例如注册表项)配置这些选项。

Chrome 政策列表

自动填充启用

启用自动填充

数据类型: 布尔值 (REG_DWORD)

Windows 注册表位置: Software\Policies\Chromium\AutoFillEnabled

描述: 启用 Chromium 的自动填充功能,并允许用户使用以前存储的信息(如地址或信用卡信息)自动完成 Web 表单。如果禁用此设置,用户将无法访问自动填充。如果您启用此设置或未设置值,自动填充将保持在用户的控制之下。这将允许他们配置自动填充配置文件并自行决定打开或关闭自动填充。

请告诉公司经理,试图禁用自动完成密码是错误的。浏览器故意忽略任何试图这样做的人是错误的。那些人应该停止做错事。™

换一种说法

换一种说法:

  • 如果 用户 浏览器
  • 错误 “请输入您最喜欢的娘家姓的第一个颜色的名字。” 新密码
  • 用户
  • 不想要 他们的 浏览器
  • 更新 他们的 密码,
  • 然后 他们
  • 将单击 “否”

在此处输入图像描述

  • 如果我想保存我的 HIPPA 密码:那是我的权利
  • 如果我想保存我的 PCI 密码:那是我的权利
  • 如果我想保存 “用户的新密码” :那是我的权利
  • 如果我想保存一次性密码:那是我的权利
  • 如果我想保存我的 “第一色最喜欢的少女” 答案:那是我的权利。

否决用户的意愿不是你的工作。这是他们的浏览器;不是你的。

原文由 Ian Boyd 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题