当我在Firefox中提交一个带有密码字段的表单时,浏览器会询问我是否希望它为我记住用户名和密码。例如,在Firefox中登录gmail,我在弹出窗口中看到这样的消息:
您想要记住google.com上"markamery@gmail.com"的密码吗?
与'记住密码','不是现在'和'Never for this site'选项。
我正在开发一个插件,将用于在多个网站上提供服务。用户将在我们的mysite.com
上拥有一个帐户,我们的客户,如someclient.com
,在他们的网页上包含mysite.com
的Javascript脚本,将我们的内容和功能添加到他们的页面上,包括用户可以使用登录表单登录我们的网站。(登录过程的实际机制都是用iframe、AJAX和HTML5 postMessage
s处理的,这并不重要)。
当用户在someclient.com
上登录我们的插件时,我希望他们的浏览器提示他们记住mysite.com
上的密码,当他们在someotherclient.com
上看到我们的登录表单时,我希望它能自动完成与他们在someclient.com
上输入的相同的用户名和密码。然而,目前,他们得到一个提示,询问
您想要记住someeclient.com上"您的名字"的密码吗?
,这不是我想要的。
我想要的是可能的吗?如果是,怎么做到的?
将表单放入iframe中会导致Firefox至少将任何存储的密码与iframe的域相关联,而不是与主页面的域相关联。您可以使用postMessages与iframe通信。
让iframe捕获表单提交事件,序列化表单的内容,并通过postMessage将其发送到主窗口;然后主窗口可以从消息中获取表单的内容,并使用Javascript处理它。
当然,即使在简单的情况下,这也是一个相当丑陋的hack,如果在iframe中的内容和主页面的内容或代码之间存在复杂的交互,那么试图通过postMessage正确地处理它们可能会导致快速陷入痛苦和意大利面条。如果拥有跨域密码自动完成功能的价值很低,并且主要问题是拥有带有错误域名的记住密码消息很糟糕,那么可以考虑完全禁用该功能,而不是使用黑客来修复它。你可以通过将表单的"autocomplete"属性设置为"off"来禁用它,如下所示:功能