엑스플랫폼 - 공통 제약사항

String.replace 함수 사용 시 오류

현상

String.replace 함수 사용 시 전역 매칭플래그(‘g’)를 지정하지 않아도 항상 전체 문자열에서 일치하는 패턴을 찾아서 변경하는 오류가 엑스플랫폼 런타임 환경에서 발생합니다.

String.replace 함수 사용 시 전역 매칭플래그를 지정하지 않으면 strRegExp의 표현식을 만족하는 첫 번째 패턴 문자열만을 바꾼 후 중단하고, 전역 매칭플래그가 지정된 경우에는 대상이 되는 전체 문자열에서 strRegExp의 표현식을 만족하는 모든 패턴 문자열을 찾아 바꾸는 것이 기본 동작이지만 오류가 발생하고 있습니다.

스크립트

웹브라우저 처리 결과

엑스플랫폼 런타임 처리 결과

var strText = "www.tobesoft.com";

result = strText.replace(".", "_");

www_tobesoft.com

www_tobesoft_com

var strText = "www.tobesoft.com";

result = strText.replace(/./, "_");

www_tobesoft.com

www_tobesoft_com

var strText = "www.tobesoft.com";

result = strText.replace(/./g, "_");

www_tobesoft_com

www_tobesoft_com

대안

ECMA Script에 정의된 String.replace 함수의 동작과 다르게 구현된 오류로써 기존에 개발 완료된 모든 사이트의 스크립트를 수정해야 하는 문제가 발생하기 때문에 현재 상태를 유지하기로 했습니다.

아래와 같은 스크립트로 대체하여 사용하십시오.

var strText = "abcda";
var matched = strText.match(/a/);
if (matched != null)
	strText = RegExp.leftContext + "b" + RegExp.rightContext;
alert(strText); // "bbcda"

switch~ case문 오류

현상

switch 문 조건절의 Type 과 case 라벨의 Type 이 다른경우 오동작하는 문제가 엑스플랫폼 런타임 환경에서 발생합니다.

switch(2)
{
	case "1":
		alert("1");
	case "2":
		alert("2");
	default:       
		alert("default");
}

위와 같이 Script를 사용할 경우 결과가 ECMA(AJAX 버전 포함) Spec 상으로는 "strict equal" 처리가 되어 "default" alert 창만 떠야 하지만 엑스플랫폼 런타임의 경우 "2","default" 두 번의 alert 창이 뜨는 오동작이 발생하고 있습니다.

대안

ECMA Script에 정의된 switch case~문의 동작과 다르게 구현된 오류로써 기존에 개발 완료된 모든 사이트의 스크립트를 수정해야 하는 문제가 발생하기 때문에 현재 상태를 유지하기로 했습니다.

switch 문 대신 if 문을 사용하면 이 문제를 해결할 수 있습니다.

일본어 IME 사용시에 IME 상태 원복 오류

현상

일본어IME 를 사용하는 경우 global IME 설정 상태일 때 윈도우의 FileDialog 창을 띄운 후에 Dialog 가 닫히고 다시 원래 화면으로 돌아온 경우에 최종 IME상태가 바뀌는 현상이 엑스플랫폼 런타임 환경에서 발생합니다.

해당 현상은 윈도우 7 이전 OS 에서만 발생하며 한글 IME를 사용하는 경우는 발생하지 않습니다. 엑스플랫폼 런타임 환경이 아닌 Internet Expolorer 나 Chrome 등의 기타 브라우저에서도 같은 현상이 발생합니다.

대안

윈도우 7 이전의 IME 시스템에서 발생하는 문제로 OS 를 업그레이드 하는 방법외에 현재 가능한 대안은 없습니다.

Layered Window Drawing 오류

현상

Layered 로 설정된 Window(ChildFrame, MainFrame 등)의 위에 Layered가 아닌 Window가 새로이 생성되는 경우, 생성되는 Window가 나타날 자리에 구멍이 뚫린듯한 모습이 순간적으로 보이는 현상이 엑스플랫폼 런타임 환경에서 발생합니다.

  1. layered=true 로 생성된 MainFrame 에서 layered=false 인 ChildFrame을 생성하여 ShowModal 호출

  2. 잠깐 보이는 구멍난 듯한 화면

  3. ChildFrame 나타남

이 현상은 XPlatform에서 특이한 처리때문에 발생한 것이 아닌 Windows OS 자체의 Layered Window Drawing 방식에 의한 것으로 일반 Win32로 Layered Window를 생성하여 그 위에 Non-Layered를 생성하면 동일 증상이 발생합니다.

이러한 현상은 Layered Window가 일반 Window와 같은 Layer에 존재하는 것이 아닌, Non-Layered Window로만 완성된 화면 위에 Layered Window를 그리고 있기 때문에 발생하는 것으로 추정됩니다. 새 Window가 나타나기 전 해당 Window의 아래 Layer 배경을 지운 화면에 Layered Window가 포함되어 있지 않기 때문에 구멍 난 화면이 보이는 것입니다.

특이사항으로 윈도우 비스타 이상에서 Aero 기능을 사용하면 위 현상이 발생하지 않습니다. Aero 기능을 사용할 때 OS에서 화면 전체를 Double Buffering 처리하기 때문입니다.

대안

시스템의 Drawing 처리 방식에 의한 것으로 현재 대안이 없습니다. Layered의 Child Window를 생성할 때 Layered로 동일하게 생성하기를 권장합니다.

MS office 365, 2016 버전의 2017년 03월 패치부터 엑셀 Export 결과물이 변형되는 현상

현상

MS office 365, 2016 버전을 사용하는 시스템에서 엑셀 export 결과물이 기존과 다른 모양으로 나타나는 현상입니다. 2017년 3월 이후의 패치 버전으로 업데이트 시 해당 현상이 나타납니다.

구체적인 현상은 아래와 같습니다.

오류 현상

처리 여부

column width 가 반영되지 않음

엑스플랫폼 내부에서 보완, 수정 (2017년 5월 정기)

font name, color, size 가 반영되지 않음

엑스플랫폼 내부에서 보완, 수정 (2017년 5월 정기)

data가 없는 cell 이 나타나지 않음

엑스플랫폼 내부에서 보완, 수정 (2017년 6월 정기)

cell align 이 반영되지 않음

보완 불가

merge 된 그리드를 출력 시 모양 변경

보완 불가

대안

현상이 발생하기 이전의 office 업데이트 버전(16.0.7870.2038)으로 다운그레이드합니다.

  1. Windows 시작 버튼을 마우스 우측 버튼으로 클릭 후 실행을 선택합니다.

  2. 실행 창에 아래 내용을 복사 붙여넣기 후 확인을 누릅니다.

    "C:\Program Files\Common Files\microsoft shared\ClickToRun\officec2rclient.exe" /update user updatetoversion=16.0.7870.2038

  3. 다운그레이드가 완료되면 문제가 해결되었는지 확인합니다.

하위 빌드로 다운그레이드하였기 때문에 재업데이트 시 같은 문제가 나타납니다. 엑셀 실행 후 [파일 - 계정 - 업데이트 사용 안 함] 설정을 통해 Office 업데이트를 해제하여 사용하시면 됩니다.

Edge 브라우저 IE 모드 실행 시 창 배열 순서가 강제로 변경되는 현상

현상

Edge 브라우저에서 IE 모드를 설정하고 Embed된 형태로 엑스플랫폼 런타임을 실행한 후 부모를 null로 설정하고 모달리스 창을 띄운 경우 발생하는 현상입니다. 모달리스 창으로 띄운 엑스플랫폼 화면에서 파일대화상자를 실행하는 경우 Edge 브라우저와 다른 애플리케이션 창 배열 순서가 강제로 변경됩니다.

예를 들어 Edge 브라우저와 Modeless 창 사이에 파일 탐색기를 배치한 후 Modeless 창으로 띄운 엑스플랫폼 화면에서 파일대화상자를 실행하면 파일 탐색기와 Edge 브라우저의 창 배열 순서가 바뀌어 표시됩니다.

  1. Edge 브라우저 IE 모드 설정 후 Embed 형태로 엑스플랫폼 런타임 실행

  2. Embed 엑스플랫폼 런타임에서 Parent를 null로 설정하고 Modeless 창으로 엑스플랫폼 런타임 띄움

  3. Edge 브라우저와 Modeless 창 사이에 파일 탐색기 배치

  4. Modeless 창으로 실행한 엑스플랫폼 화면에서 파일대화상자 실행

    Edge 브라우저와 파일 탐색기의 창 배열 순서가 변경된 것을 확인할 수 있습니다.

대안

모달창으로 실행한 화면에서 WebBrowser 컴포넌트의 HTML 콘텐츠에서 mousemove 이벤트를 처리하지 못하는 현상

현상

마이크로소프트사의 인터넷 익스플로러(Internet Explorer. 이하 IE)에서 엑스플랫폼 애플리케이션을 임베디드(Embedded)해 사용할 수 있는 ActiveX 컴포넌트인 XPlatformAX를 사용해 실행한 애플리케이션에서 발생하는 현상입니다.

위와 같은 조건에서 애플리케이션을 실행한 경우 ChildFrame 오브젝트의 showModal 메서드를 실행해 열린 모달창 내에 포함된 WebBrowser 컴포넌트의 url 속성값으로 설정한 HTML 콘텐츠 내에서 mousemove 이벤트를 처리하지 못합니다.

mousemove 이벤트를 처리하지 못하는 것은 WebBrowser 컴포넌트에서 사용하고 있는 Microsoft WebBrowser Control의 문제이기 때문에 엑스플랫폼에서 이를 수정하거나 제어할 수 없습니다.

대안

모달창에서 실행한 경우에만 발생하는 현상입니다.

open 메서드를 사용해 모달리스 창을 여는 경우에는 HTML 콘텐츠 내에서 mousemove 이벤트를 처리할 수 있습니다.