2016-07-04 13 views
2

attached codepen에서 크롬이 멈추는 시나리오를 볼 수 있습니다. 탭.
이것은 또한 전자 프로젝트에서 발생합니다. 그래서 이것은 크롬에만 국한되지 않습니다.크롬 텍스트 영역 버그 - dir = "auto"+ 자리 표시 자 + 1 rtl 문자를 사용하여 오른쪽/왼쪽 화살표를 사용하면 크롬이 누락됩니다

단계 재현 :
1. 오른쪽 및 왼쪽 화살표
3. 크롬 중단을 DIR = "자동"으로 텍스트 영역과 자리와 텍스트 영역에 히브리어
2 초점 한 문자를 가지고 공격 영원히 구글이 그것을 수정까지이 버그를 arround 얻을 아이디어를 듣고 행복

<textarea dir="auto" cols="5" rows="3" placeholder="write something">ע</textarea> 


편집

을 (를보고) 문제가 더 심각하다. 자리 표시자가 있다면 dir = "auto"이고 영어 문자열에 히브리어 문자가 하나 있으며 화살표로 탐색하면 히브리어에 도착할 때 크롬이 손상됩니다. 편지 (d 개를 붙이고 볼 수 있음).
여기에이 버그 https://bugs.chromium.org/p/chromium/issues/detail?id=625739

스타하십시오
히브리어 문자 사이에 커서 루프의 어떤 종류를 입력 (BBB גג AAA 등)이 개 히브리어 문자를 추가하고 충돌하지 않습니다하지만 정말 이상한 동작합니다 화살표로 이동하는 경우 편집 2
크롬 팀은 버그를 수정하고 수정 카나리아 :

편집에 이미 수정은 이제 크롬 VAR을 확인 this를 사용할 수있는 크롬 (52)에 살고있다 3 왼쪽 화살표 키를 비활성화하십시오

답변

0

내가 선택한 "해결책"은 shift 키를 누르지 않았거나 텍스트 영역에 rtl 문자가 포함되어 있으면 왼쪽 화살표 키를 비활성화하는 것입니다.

//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] 
:
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(); 
    } 
    } 
}); 

이 패턴에 다음과 같은 방법을 가지고 : 여기에 코드 여기 http://codepen.io/avipinto/pen/kXwBWq

는 코드 업데이트 된