1. 넥사크로 프로젝트를 진행하다보면, 스크립트에서 eval을 사용한 경우를 빈번히 볼 수 있다.
예컨대, 아래와 같은 스크립트들..
for ( var i = 1 ; i < 5; i++ ) {
eval("this.div_ncuProgram.form.div_frame.form.div_row" + i).set_visible(false)
eval("this.div_ncuProgram.form.div_frame.form.div_row" + i + ".form.edt_title").set_value("");
eval("this.div_ncuProgram.form.div_frame.form.div_row" + i + ".form.edt_jumsu").set_value("");
} // 이러한 사용사례가 현재 프로젝트에서는 900건이 넘는다
2. 투비소프트에서는 eval을 대체하는 방법으로 components 라는 속성을 제공한다.(all, objects 등의 속성도 있음)
예컨대, 아래처럼 회피가 가능하단건데..
eval("this.Button00") // eval을 회피하기 위해서
this.components["Button00"] // this.components 속성을 통해 Button00 버튼 객체 접근
3. 넥사크로에서 제공해주는 속성이 아닌 순수 자바스크립트로도 회피가 가능하다.
자바스크립트에서, 객체는 . 으로 속성을 접근 할 수도 있지만 괄호(브라켓)로도 속성을 접근 할 수 있다.
브라켓 표기법을 사용하면 동적으로 객체에 접근이 가능하다.
eval("this.Button00") // eval을 회피하기 위해서
this["Button00"] // 브라켓 표기법으로 접근
// 넥사크로에서 많이 사용하는
this.ds_main.setColum(0, "A", "1");
// 아래도 동일하다
this["ds_main"]["setColumn"](0, "A", "1");
마치며,
프로젝트에서 외부 감리를 한다면 보안상 취약을 이유로 eval 사용시 지적사항이 된다.
어쩔 수 없는 경우는 new Function 을 통해서 회피를 하면 되고,
(특정 버전에선 new Function 을 사용하면 제너레이트가 안 된다는 경우가 있는 것 같음)
단순히 객체에 접근을 위한 목적이라면 브라켓 표기법을 사용하면 되겠다.
구글링 키워드
- 자바스크립트 유사 배열
- 자바스크립트 브라켓 표기법
- new Function
'JAVA SCRIPT > NEXACRO' 카테고리의 다른 글
[NEXACRO] typeof 가 모두다 'object' ? (0) | 2025.01.17 |
---|---|
[NEXACRO] 넥사크로 불편요소 (0) | 2024.11.08 |
[JAVA SCRIPT] 브라우저 개발자도구를 활용한 넥사크로 디버깅 (0) | 2023.10.11 |
[JAVA SCRIPT] Number 함수의 동작 방식(객체의 형변환)(nexacro.Decimal에 대한 고찰) (0) | 2023.08.30 |
[JAVA SCRIPT] findRowExpr(VLOOKUP) 구현하기 (0) | 2022.02.14 |