你可以在附件中看到一个导致chrome挂起的场景,唯一的方法是关闭选项卡。
这也发生在一个电子项目,我有,所以这不是特定的铬。
复制步骤:
1. 有一个文本区,dir="auto",一个占位符和一个希伯来语
字符2. 关注文本区域,点击左右箭头
3.Chrome永远挂起
<textarea dir="auto" cols="5" rows="3" placeholder="write something">ע</textarea>
很高兴听到解决这个错误的想法,直到谷歌修复它(报告它)
编辑
问题甚至更糟,然后我想,没关系,如果你有一个占位符,如果dir="auto",有一个希伯来字母在一个英文字符串,导航与箭头将崩溃chrome当你得到希伯来字母(你可以粘贴d - wmd和看到)。
如果你添加两个希伯来字母(比如aaaגגbbb)和导航箭头不会崩溃但行为很奇怪,进入一种游标循环之间的希伯来字母
请在此标记此错误https://bugs.chromium.org/p/chromium/issues/detail?id=625739
编辑2
chromium团队修复了这个bug,并且已经在Canary上修复了:)
编辑3 这个修复现在在Chrome 52上存在,你可以用它来检查Chrome版本并禁用左箭头键
我选择的"解决方案"是禁用左箭头键,如果没有按下shift,如果文本区包含rtl字符。更新了这里的代码http://codepen.io/avipinto/pen/kXwBWq
下面是代码:var rtlPattern =/[u0590-u085F,u08A0-u08FF,uFB1D-uFEFF]|uD802[uDC40-uDFFF]|uD803[uDC00-uDCFF]|uD803[uDE60-uDE7F]|uD83B[uDE00-uDEFF]/;
$(document).on("keydown","textarea",function(event){
if (!event.shiftKey && (event.keyCode === 37))
{
if(this.value && rtlPattern.test(this.value))
{
event.preventDefault();
}
}
});
以下列方式进入此模式:
//Unicode Ranges
// u0590-u05FF Hebrew
// u0600-u06FF Arabic
// u0700-u074F Syriac
// U+0750-U+077F Arabic Supplement
// U+0780-U+07BF Thaana Letter Paviyani
// U+07C0-U+07FF NKo
// U+0800-U+083F Samaritan
// U+0840-U+085F Mandaic
//--------------------
// U+08A0-U+08FF Arabic Extended-A
//--------------------
// U+FB1D-U+FB4F Alphabetic Presentation Forms (part of it)
// U+FB50-U+FDFF Arabic Pres. Forms-A
// U+FE70-U+FEFF Arabic Pres. Forms-B
//--------------------
// U+10840-U+1085F Imperial Aramaic
// U+10860-U+1087F Palmyrene
// U+10880-U+108AF Nabataean
// U+108E0-U+108FF Hatran
// U+10900-U+1091F Phoenician
// U+10920-U+1093F Lydian
// U+10980-U+1099F Meroitic Hieroglyphs
// U+109A0-U+109FF Meroitic Cursive
// U+10A00-U+10A5F Kharoshthi
// U+10A60-U+10A7F Old South Arabian
// U+10A80-U+10A9F Old North Arabian
// U+10AC0-U+10AFF Manichaean
// U+10B00-U+10B3F Avestan
// U+10B40-U+10B5F Inscriptional Parthian
// U+10B60-U+10B7F Inscriptional Pahlavi
// U+10B80-U+10BAF Psalter Pahlavi
// U+10C00-U+10C4F Old Turkic
// U+10C80-U+10CFF Old Hungarian
// the top range is calculated by https://github.com/mathiasbynens/regenerate :
// console.log(regenerate().addRange(0x10840,0x10CFF).toString());
// > uD802[uDC40-uDFFF]|uD803[uDC00-uDCFF]
//-----------------------------------------
// U+10E60-U+10E7F Rumi Numeral Symbols
// console.log(regenerate().addRange(0x10E60,0x10E7F).toString());
// > uD803[uDE60-uDE7F]
//-----------------------------------------
// U+1EE00-U+1EEFF Arabic Mathematical Alphabetic Symbols
// console.log(regenerate().addRange(0x1EE00,0x1EEFF).toString());
// > uD83B[uDE00-uDEFF]