【发布时间】:2018-05-01 09:21:00
【问题描述】:
更新
显然,这是 OS X 版本的 Google Chrome 的未解决问题。 It was first reported over seven years ago. 如果您碰巧发现自己需要输入包含非 ASCII 字符的密码,那么您可以选择:
- 在其他地方输入密码,然后通过剪贴板将其传输到密码字段。
- 使用开发者工具将输入类型从
password更改为text。- 使用其他浏览器
对于可以输入密码字段的字符是否有任何规则?我一直在 Mac 上尝试使用 Chrome,看起来我只能输入“特殊”字符,如果它们可以通过单个按键生成(不包括修饰键,如 Alt 和 Shift )。
例如,我可以通过单次按键 (AltG) 输入版权符号 (©),但字母“o”带有变音符号 (ö)需要两个(AltU 后跟 O)。在后一种情况下,变音符号不会出现在密码中。在 Windows 中,这些字符似乎是通过在按 Alt 键的同时输入幻数来获得的,因此这种行为可能存在跨平台差异。也可能存在跨浏览器差异。
我问的原因是因为我想实现一个带有密码输入字段的注册表单,该字段可以从type="password" 切换到type="text"。这允许用户检查该字段的内容(假设这样做是安全的),并允许我使用随机密码生成器在该字段中预先填写一些用户可以复制到确认字段中的内容。但是通过这样做,我正在更改该字段接受的字符集。这显然是不可取的;例如,如果我选择Röntgen作为密码,我将永远无法登录(除非登录形式也可切换)。
那么这里最好的方法是什么?我不想完全禁止特殊字符,但将每个人限制为可打印的 ASCII 似乎是最简单的选择。
为了说明问题,这里有一个包含两个密码字段的表单。一个字段可以切换为普通文本输入。单击按钮显示两个字段的内容。
function reveal() {
if ($('#p1').attr('type') == 'password') {
$('#p1').attr('type', 'text');
$('#r').html('(Hide)');
}
else {
$('#p1').attr('type', 'password');
$('#r').html('(Reveal)');
}
}
function show_passwords() {
$('#out1').html($('#p1').val());
$('#out2').html($('#p2').val());
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<form onsubmit="return false;">
<p><label>Password:<br><input type="password" id="p1" name="p1" size="20"></label>
<small><a id="r" href="#" onclick="reveal()">(Reveal)</a></small></p>
<p><label>Confirm password:<br><input type="password" id="p2" name="p2" size="20"></label></p>
<p><button onclick="show_passwords(); return false">Show password field contents</button></p>
</form>
</div>
<table style="min-width:20em; border: 1px solid #bbb">
<tr><td style="width:8em">Password:</td><td id="out1"></td></tr>
<tr><td>Password confirm:</td><td id="out2"></td></tr>
</table>
【问题讨论】:
-
我相信这与客户接受的字符范围有关(即如果他们的客户只处理 UTF-8,他们就只能输入 UTF 8)
-
我不完全理解这个问题,因为我无法在我这边重现任何类似的东西(Win10 上的 Firefox,带有西班牙语键盘布局),但它感觉像是苹果/谷歌方面的错误或限制,而不是什么在 HTML、JavaScript 或 DOM 中是有意的。当您说“不会出现在密码中”时,您会得到什么?什么都没有?您的应用程序是否使用完全兼容 Unicode 的编码,例如 UTF-8?
-
@ÁlvaroGonzález 就像我说的,我只是得到没有变音符号的“o”。我不明白你所说的 Unicode 兼容性是什么意思。我提供的 sn-p 是从 Stack Overflow 服务器运行的。 Stack Overflow 到处都使用 UTF-8。我也是。我确信 Chrome 与 UTF-8 兼容。我想所有当前的网络浏览器都是。这些都不能解释文本输入和密码输入字段之间的行为差异。也许这只是 OS X 的问题?
-
对不起,有时问题包括堆栈 sn-ps 不能重现问题,因此我的评论。
-
Chrome 在我的 Windows 10(西班牙版布局)副本中似乎也没有表现出这种行为。
标签: html macos google-chrome passwords usability