有没有好的方法来禁用“SmartiOS 11 Apple 键盘生成的标点符号 - 在 Safari 中的 HTML 登录表单上 - 特别是用户名字段?
问题是我们的用户名中含有撇号。在 iOS 11 上输入用户名并且不了解 unicode 的微妙之处,他们将无法登录。
理想情况下,我们可以指示此类用户禁用智能引号或通过按住撇号键键入正确的字符 - 但我正在为小孩子开发教育软件,这是不可能的。
由于只有一小部分用户具有实际的能力,这一事实使问题变得更加复杂。弯单引号在他们的用户名中,因此简单的替换映射不起作用 - 而且我们无法规范化用户名,因为它们来自我们无法控制/无法拥有太多发言权的许多外部系统。
不幸的是根据这个 MDN 页面没有已知的 Webkit<input>
or <textarea>
属性来禁用智能引号,但您可以使用我编写的源自此 QA 的脚本对其进行修补:如何禁用浏览器中文本区域字段的智能引号?
window.addEventListener('DOMContentLoaded', attachFilterToInputs );
function attachFilterToInputs() {
var textInputs = document.querySelectorAll( 'input[type=text], input[type=password], input[type=email], input[type=search], input[type=url], textarea, *[contenteditable=true]' );
for( var i = 0; i < textInputs.length; i++ ) {
textInputs[i].addEventListener( 'keypress', preventPretentiousPunctuation );
}
}
var conversionMap = createConversionMap();
function createConversionMap() {
var map = {};
// Open-quotes: http://www.fileformat.info/info/unicode/category/Pi/list.htm
map[ 0x2018 ] = '\'';
map[ 0x201B ] = '\'';
map[ 0x201C ] = '"';
map[ 0x201F ] = '"';
// Close-quotes: http://www.fileformat.info/info/unicode/category/Pf/list.htm
map[ 0x2019 ] = '\'';
map[ 0x201D ] = '\"';
// Primes: http://www.fileformat.info/info/unicode/category/Po/list.htm
map[ 0x2032 ] = '\'';
map[ 0x2033 ] = '"';
map[ 0x2035 ] = '\'';
map[ 0x2036 ] = '"';
map[ 0x2014 ] = '-'; // iOS 11 also replaces dashes with em-dash
map[ 0x2013 ] = '-'; // and "--" with en-dash
return map;
}
function preventPretentiousPunctuation( event ) {
if( event.key.length != 1 ) return;
var code = event.key.codePointAt(0);
var replacement = conversionMap[ code ];
if( replacement ) {
event.preventDefault();
document.execCommand( 'insertText', 0, replacement );
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)