或者 Firefox 如何确定密码/用户名的去向?
如果我更改输入元素的名称、id、标题、类,Firefox 会不断用密码或电子邮件填充它。
如果我正确理解了 Firefox 的源代码,浏览器首先会在表单中查找密码字段。如果表单包含超过 3 个密码字段,自动填充功能会忽略该表单。
找到 1 到 3 个密码字段后,浏览器会查找登录字段。浏览器从第一个密码字段开始向后搜索,并假设登录字段是类型为text
oremail
或url
ortel
的第一个找到的字段number
。
下一步取决于我们是否在页面加载或提交表单时检查表单。如果我们在页面加载期间检查并且有一个登录字段和一个密码字段,那么情况很简单,浏览器可以填写表格。
其他情况(表单提交或超过 1 个密码字段)执行一些“智能”逻辑来确定哪个密码字段包含新密码和哪个旧密码,可能是为了更新存储的密码)。如果您对细节感兴趣,请下载源代码并打开toolkit/components/passwordmgr/nsLoginManager.js
文件。要检查的函数_fillForm
是_getFormFields
和_getPasswordFields
。
总结一下,Firefox 不需要任何 ID、名称或类属性来猜测哪个字段是登录名或密码。它只依赖于类型和表单字段的顺序。
我尝试了一个迄今为止有效的简单解决方案。创建 2 个隐藏字段,浏览器将自动填充这些字段。
<input type="text" style="display: none">
<input type="password" style="display: none">
看起来在登录和密码输入之间使用禁用的输入文本可以很好地解决问题:
<input type="text" disabled="disabled" style="display:none">
这些是表单上仅有的两个元素吗?Firefox 可能会存储表单的结构(两个输入框,一个标记为正常,一个标记为密码)并填写保存的信息,而不考虑输入元素的 ID。
试试这个:向表单添加一个额外的输入元素,看看会发生什么。要么 Firefox 不会填写任何内容,要么您会在第一个字段中找到您的姓名,而密码字段已填写,而第二个输入元素为空白。