Chrome 文本区域错误 - 当 dir= "auto" + 占位符 + 1 个使用右/左箭头的 rtl 字符时,会挂起铬



你可以在附件中看到一个导致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]

最新更新