即使从页面中删除了登录组件,Firefox 仍要求保存密码

Firefox asks for password saving even after login component is removed from page

如果我们在应用程序中创建了带有登录名和密码字段的组件,那么在我们通过路由器导航到其他组件后,Firefox 会要求保存密码。回答 "No" 没有帮助,因为当我们在页面之间导航时通知会一次又一次出现。

但是,如果我们没有创建带有登录名和密码字段的组件(没有使用此组件打开 url),则导航不会调用通知。

好像,带有登录名和密码的表单出现在 DOM 中,同时消失,所以 Firefox 认为我们已经登录成功。

但这没有任何意义,因为在我们离开带有输入的页面后,组件被销毁了。

Chrome没有这样的问题,所以不清楚是Angularbug还是Firefox的bug。

预期的行为是 Firefox 应该只询问一次保存密码,而不是页面之间的每次导航。

带有演示的 Plunker http://embed.plnkr.co/SUcx1ZJMFVXMeI4aJZ41/

  1. 导航至第 1 页
  2. 之后导航到密码
  3. 然后再次导航到第 1 页。将出现通知。
  4. 回答 "No" 并导航至第 2 页。通知将再次出现。

之后尝试相同的示例,但不使用登录名和密码创建表单

  1. 重新加载插件(可能需要重新加载所有页面)
  2. 导航至第 1 页
  3. 导航到第 2 页
  4. 在我们导航到密码页面之前不会出现通知。

有没有人遇到过这样的行为并且知道如何解决?通知很烦人。

UPD 18.04.2018: 之前我们注意到,这个问题只出现在 JIT 编译中。对于生产和 AOT 构建,一切工作正常 - 没有显示密码保存建议的提示。所以在某个地方出现了问题,但它只对开发人员来说很烦人。

几天前我们将Angular升级到5.2.10版本,NodeJS升级到8.11.1版本(之前用的是7.10)。之后生产模式也出现这个问题

仍然没有解决方案或不清楚是什么原因。

我不知道这是否有帮助。当我的密码元素未包含在 <form> 元素中时,我在使用 Vue.js 时注意到了这个问题。为了补救,我用 <form> 元素围绕我的登录字段,我在该元素上为 submit 事件设置了 preventDefault 指令。在 Vue.js 中看起来像这样:

<form v-on:submit.prevent>
Username: <input v-model="username" />
Password: <input type="password" v-model="password" />
</form>

我应该提一下,当您提交表单时仍然会要求您保存密码,但后续导航不会再出现提示。

我刚刚在 React 中遇到了同样的问题。

原因是我的登录表单不是 <form>,而是一个简单的 <div>。 我将其设置回 <form> 并且 Firefox 不再要求在每次异步调用时保存凭据。

虽然我不知道确切的原因,Chrome一直都很好

是的,行得通。将字段包装到 form 标记中是一个非常好的和简单的想法。我以前没试过这个。

而且Firefox这样做似乎是站得住脚的。输入实际上应该始终在表单内,因为在常规应用程序中,没有表单就不可能发送数据。此外,在 form 中放置输入解决了 Chrome 中自动检查自动填写表单的问题。 所以遵循标准是避免意外错误的最佳方法。