Chrome自动填充功能涵盖了Google Maps API v3的自动填充功能

Col*_*rip 39 html google-maps google-chrome google-maps-api-3

我正在使用Google Maps Javascript v3在HTML输入字段上设置自动填充,如下所示:

http://imgur.com/Rm6X2FI.png - (没有自动填充)

我遇到的问题是Chrome的自动填充功能会覆盖地图自动填充功能,如下所示:

http://imgur.com/7a2QM7L.png - (带自动填充)

几个月前我在网上找到了一个解决方案(参考:禁用Chrome自动填充),但似乎这个解决方案不再有任何影响.

<input type="text" name="address" id="address_fake" autocomplete="off" style="display:none">
<input type="text" name="address" id="address" autocomplete="off" placeholder="Address" />
Run Code Online (Sandbox Code Playgroud)

有什么方法可以阻止Chrome的自动填充功能显示在Google地图自动填充列表的顶部吗?

编辑:停止谷歌铬自动填充输入不提供我当前问题的解决方案.问题在于输入字段上的Chrome自动填充下拉菜单,而不是自动填充自动填充值的输入字段.

Rim*_*mel 49

上述答案都不适合我(Chrome 64.0.3282.186,x64 windows).

TL; DR:谷歌地图代码正在将autocomplete属性更改为off,因此即使您将其设置为new-password,您仍将获得自动填充.我正在使用的黑客是监听该属性的突变然后覆盖它.注意:只需在调用Google地图后更改属性即可.

在初始化Google Maps Autocomplete之前设置MutationObserver,立即停止侦听突变,然后将属性设置为new-password.

    var autocompleteInput = document.getElementById("id-of-element");

    var observerHack = new MutationObserver(function() {
        observerHack.disconnect();
        $("#id-of-element").attr("autocomplete", "new-password");
    });

    observerHack.observe(autocompleteInput, {
        attributes: true,
        attributeFilter: ['autocomplete']
    });
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是谷歌自己的服务完全打破了他们自己的浏览器,这不符合规范.很好的解决方法. (11认同)
  • 消除对 jQuery 依赖的小修复 - 将 `$("#id-of-element").attr("autocomplete", "new-password");` 替换为 `autocompleteInput.setAttribute("autocomplete", "new-密码”);` (2认同)
  • 天啊,都2020年了,这种事还在发生。Google Maps JS 库仍在添加此值,该值现在被 Chrome 忽略并导致“双重自动完成”。感谢您写下这个答案。 (2认同)

Pla*_*001 19

这让我完全疯了.有同样的问题.我们使用脚本来为用户提取字段值以供选择,并且不希望浏览器自动 - 无论如何都要搞砸了.Chrome似乎是我们可以使用的bugger(最新版本42.0.2311.135 m),Firefox(FF).

因此,我们还必须处理浏览器的自动完成和Chrome的自动填充.如果我在顶部添加:<form autocomplete ="off">,则会停止FF和Chrome中的自动完成,但不会停止Chrome中的AUTOFILL.将'off'更改为'false'对任一浏览器都没有任何作用.解决了FF问题,但没有解决Chrome,因为它显示了丑陋的AUTOFILL框内容.

如果您将autocomplete ="off" 分别添加到每个字段,则再次使用FF,但对于在Chrome中具有此属性自动完成功能的输入字段已关闭,但自动填充仍然会显示其丑陋的头部.

现在,奇怪的是,如果您将单个输入字段中的值从"关闭"更改为"假",那么它似乎会震动Chrome并且对于该字段,您将此设置为autocomplete ="false",那么您只能看到该自动完成值(如果有的话是在之前的字段中输入)和所有其他输入字段显示什么!您还可以将此值设置为no或xx或其他任何类似于自动填充的无效值上的Chrome barf,并且表单反应奇怪.如果您有5个字段并将其设置为第三个字段,则字段1,2,4和5为空,但字段3显示自动完成.

这是一个复制和混乱的例子(尝试将autocomplete属性移动到不同的字段,看看它是如何反应的):

<!DOCTYPE html>
<html>

<head>
  <title>Signup</title>
</head>

<body>
  <form autocomplete="off" method="post">
    First name:
    <input name="Firstname" type="text">
    <br />Last name:
    <input name="Lastname" type="text" style="width: 124px">
    <br />Address:
    <input autocomplete="false" name="Address" type="text" style="width: 383px">
    <br />Phone number:
    <input name="Phone" type="text">
    <br />E-mail:
    <input name="Email" type="text" style="width: 151px">
    <br />
    <input type="submit">
  </form>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

我的解决方案是关闭自动填充功能 Chrome自动填充功能(您应该能够将隐藏的输入字段放在提交下方的顶部或底部).将<input autocomplete ="false"name ="hidden"type ="text"style ="display:none;">添加到代码中:

<!DOCTYPE html>
<html>

<head>
  <title>Signup</title>
</head>

<body>
  <form autocomplete="off" method="post">
    <input autocomplete="false" name="hidden" type="text" style="display:none;">
    <br />First name:
    <input name="Firstname" type="text">
    <br />Last name:
    <input name="Lastname" type="text" style="width: 124px">
    <br />Address:
    <input name="Address" type="text" style="width: 383px">
    <br />Phone number:
    <input name="Phone" type="text">
    <br />E-mail:
    <input name="Email" type="text" style="width: 151px">
    <br />
    <input type="submit">
  </form>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

底线:Chrome确实遵循autocomplete = off,但Chrome的自动填充是问题所在.希望这可以帮助.

  • 你是大师。表单上有 `autocomplete="off"` 和隐藏输入上的 `autocomplete="false"` 对我来说就像一个魅力。谢谢! (4认同)
  • 不,它不起作用,只要你在输入字段附近有一个像"地址"这样的东西,它就会显示愚蠢的下拉列表. (4认同)
  • 此解决方案不起作用.设置`autoComplete ="false"`适用于常规输入,但在调用`new this.props.google.maps.places.Autocomplete`后中断. (4认同)
  • 几年后,在Chrome 63上,这仍然是一个问题:( (2认同)

Noo*_*mad 18

感谢GSTAR。我使用了下面的代码而不是 Jquery,这对我有用

<input type="text" value="" id="address" class="form-control" placeholder="Enter a location" autocomplete="new-password" onfocus="this.setAttribute('autocomplete', 'new-password');">
Run Code Online (Sandbox Code Playgroud)


GST*_*TAR 8

jQuery解决方案:

$('#address').focus(function() {
    $(this).attr('autocomplete', 'new-password');
});
Run Code Online (Sandbox Code Playgroud)


Nic*_*k B 5

通过 Google 地图事件 w/ES6...

new google.maps.places.Autocomplete(input);
google.maps.event.addDomListener(input, 'focus', e => e.target.setAttribute('autocomplete', 'new-password'));
Run Code Online (Sandbox Code Playgroud)