禁用Safari 7.0.2密钥链密码保存

Disable Safari 7.0.2 keychain password save

本文关键字:密码 保存 密钥 Safari 禁用      更新时间:2023-09-26

如何禁用safari从使用html或javascript保存用户/通过表单?
我有这个问题,提出了safari 7.0.2在那里你可以保存一个用户/传递到一个钥匙链,当你去到相同的形式,它会自动覆盖这些字段?我个人认为这是可怕的行为。我不认为字段应该被覆盖。

我已经创建了一个独立的版本,您可以在这里演示这个问题。http://dev.davidsalazar.com/issues/safari-autofill/

复制步骤(确保使用最新的safari 7.0.2)

  1. 类型和用户/通行证单击保存。它应该提示您保存到钥匙扣,接受保存。
  2. 现在点击链接加载随机数据,你会注意到safari现在会用你以前保存的字段覆盖这些字段。

解决方法:创建另一个(假的)密码字段,Safari可能会被它混淆-在这种情况下自动填充将被"禁用"

在Safari 7.0.2和7.0.3中测试

demo(带红色假密码):http://js.pejsa.info/~jam/safari-autofill/

<form method="post" autocomplete="off"> <input type="text" name="username" id="username" value="abc" /> <input type="password" name="password" id="password" value="def" /> <input type="submit" name="submit_btn" value="Save" /> <input type="password" id="fakePassword" style="border:0;width:10px;height:10px;background-color:red;" /> </form>

由于所有浏览器的新行为,这是不可能的- autocomplete="off"现在被忽略

详情见http://raesene.github.io/blog/2014/04/17/changing-times-the-end-of-autocomplete-equals-off/

我每天为我的项目搜索这个问题。最后通过下面的插件找到了解决方案。

这个插件的工作结构是这样的。它得到你的输入并克隆它。使用此克隆并创建相同的输入属性,并克隆另一个隐藏输入。然后删除原始输入,并将隐藏的和克隆的输入放在相同的位置。

这是……的原因。现代浏览器(有钥匙链)控制输入(类型密码)时,页面加载和映射到DOM。页面加载后,插件获取输入并克隆并删除原始输入。该操作改变了DOM映射。因此,当页面重定向时,浏览器无法访问此控件。所以不建议你保存密码。

你可以使用这个插件来解决这个问题。

指出:

  1. 如果您像我一样使用其他插件。例如用于密码安全输入的jquery-keyboard插件。你应该修改你的initkeyboard方法。因为键盘控制你的输入和init在这个输入附近。你可以像下面这样修改这个init方法

init keyboard change

之前
var _inputwidth = $(elm).parent().find('input').width();

后Var _inputwidth = $(elm).parent().find('input[type=text],input[type=password]').width();

因为插件输出像这样

<input type="hidden"  id="txtPass" name="txtPass" spellcheck="false" autocomplete="off">
<input type="text"  id="txtPass" name="txtPass" spellcheck="false" autocomplete="off">
  • 如果您有任何按键或按键事件初始化此输入将此代码后插件初始化。因为这个插件改变了DOM映射
  • 这个插件的用法如下

    $('input[type=password]').disableAutocomplete();
    

    this is creator description

    这个jQuery插件强制启用autocomplete=off HTML属性密码(和其他)字段。最近的浏览器选择忽略此属性有利于用户首选项。然而,一些金融机构(和其他)机构可能有很好的理由执行这一规定练习。

    jquery禁用自动完成功能


    老发表评论我有一个有两个输入的页面。其中输入类型为密码,其他文本(用户名密码形式)。Safari不能使用autocomplete="off"。我在这个问题中使用了两个内联隐藏输入。这些输入的通用名称如下。我原来的用户名密码输入有不同的名称,所以Safari首先寻找一个钥匙链来获取或设置这些输入。您可以使用此解决方案来防止Safari对您的安全页面使用密钥链。

    <input type="text" name="Username" style="display:none;"/>
    <input type="password" name="Password" style="display:none;" />