Skip to content
TUWLAB.com
모든 게시물에 대하여 '링크'
방식의 퍼가기만 허용합니다.
한양대학교 전자통신컴퓨터공학부
바라미
  • 67
  • 2591787
DNS Powered by DNSEver.com
XE

XE 1.7.x에서 Alert 함수 재정의(Override) 해제하기

Posted 2013. 03. 14 Updated 2017. 06. 02 Views 11625 Replies 0
Atachment
첨부

XE가 1.5에서 1.7로 넘어오면서 정말 많은 부분이 바뀌었습니다.

PHP 하위 버전이나 제로보드 지원 관련 코드들이 전격 삭제되면서 반응 속도가 눈에 띄게 향상되었습니다.

특히, 관리자 페이지 레이아웃이 전격 수정되었는데, 예전의 칙칙한 디자인에서 깔끔하고 정돈된 디자인으로 바뀌었습니다.

xe_1_7_x_admin.png
▲ 깔쌈하게 바뀐 XE 1.7.x 관리자 페이지


이러한 깔끔하게 바뀐 디자인에 부응하여 자바스크립트 기본 함수도 많이 재정의(Override) 되었습니다. 특히, 기본 알림 함수인 Alert 함수가 Modal Layer 방식으로 바뀌었습니다.

alert() 함수를 호출하면 브라우저의 지원하는 기본 Alert 창이 아닌, 다음과 같은 모달창이 뜹니다.

alert_override.png
▲ 재정의된 Alert 함수


이게 디자인적으로 기존 Alert창보다 나은지는 잘 모르겠지만, XE 개발자 입장에서는 별로 좋은 개선사항이 아닌것 같습니다.

아무리 FireBug 등 자바스크립트 디버깅 툴을 활용한다고 하더라도, Alert창으로 값을 띄워보면서 디버깅 하는 것이 유용할 때가 있습니다.

사실, 저도 한때 자바스크립트의 기본 사용자 Interaction 함수인 Alert, Confirm, Prompt등의 함수를 재정의하여 사용했던 적이 있었습다. (2000년도 경이었던가.)

당시 밀레니엄 알러트(-_-)라고, 지금 생각해 보면 참 쓰잘떼기 없는 걸 개발하갖고는 Happy CGI 같은 코드 공유 사이트에 업로드 한 적이 있었습니다.

기본 개념은 alert를 실행하면 기존 칙칙한 Alert창(IE의 Alert창은 얼마나 칙칙하던가!) 대신 무려 새 창을 띄워서 지정된 소리와 함께 이걸 화면에서 슬라이딩해서 보여준다거나 하는, 말 그대로 헛짓거리 하는 스크립트였다. 게다가 동작 속도도 느려 터졌고, 여러 개의 alert를 연달아 실행하면 오류가 발생하곤 하였습니다.

confirm이나 prompt등의 함수도 재정의를 시도했으나, 함수에서 값을 리턴해줄때까지 호출 쓰레드를 잡아 놓을 방법이 없어서 그냥 포기했었습니다.


XE에서 재정의된 Alert 함수의 가장 큰 문제점은 텍스트가 아닌, 객체나 오류를 표시하도록 전달했을 때 그 내용이 제대로 표시가 되지 않는다는 점입니다.

자바스크립트 디버깅을 할 때 alert의 인수로 객체를 전달했을 때 'undefind'나 'null', '[Object]'등의 메시지가 표시되면, 이를 통해 코드 중간점검을 할 수 있는 원리입니다.

그런데 alert 함수가 오버라이드 되면서 이런 기능이 먹통이 되어 버린 것입니다.

null 객체를 alert로 전달하면 아무 화면도 표시되지 않고, HTML코드를 전달하면 마크업을 그대로 보여주는 것이 아니라 화면에 표시를 해 버립니다. (<select>가 포함된 마크업을 alert로 표시했을 때 Alert창에 콤보박스가 나타났을 때의 당황스러움이란...-_-)


재정의된 Alert는 관리자 페이지에서만 적용되며, 일반 화면에서는 재정의되지 않고 원래 Alert창이 표시됩니다.

이 재정의를 해제하기 위해 역시 관리자 페이지 소스를 뒤져서 로드된 스크립트를 모두 역추척 하였고, 그중에 범인(!)이 숨어 있던 스크립트 파일을 찾을 수 있었습니다.


다음과 같은 조치를 취하면 XE 1.7.x에 적용된 Alert 재정의를 해제할 수 있습니다.

$msgBox = $('.x_modal._common');
	$msgBox.on('change', '.site_selector', function(ev){
		var sSiteSrl = $(this).val();
		$.xeShowMenuSelector($container, sSiteSrl);
	});

	$.fn.xeMenuSearch = function(){
		$(this).each(function(nIdx, el){
			$(el).on('click', xeMenuSearch);
		});
	};

	$('.module_search').xeMenuSearchHtml();

	$('.moduleTrigger').xeMenuSearch();

});

//----------------menu selector end
/* [20130314|TUW] Alert 재정의 해제
jQuery(function($){
	//_alert = alert;
	try {
		window.alert = function(){
			return $.xeMsgBox.alert.apply($.xeMsgBox, arguments);
		}
		setTimeout(function(){$('div.message.info').fadeOut(1000);}, 2500);
	}catch(e){}
});
*/
jQuery(function($){
	$('#site,.x_modal._common').on('keydown', 'input', function(ev){
		var $container, $btn;
		if(ev.keyCode === 13){
			$container = $(ev.target).parent();
			while($container && !$container.hasClass('col')){
				$btn = $container.find('button.x_btn-primary,button.x_btn-inverse');
				if($btn.length>0){
					// multi-lang field won't set the value until the input element is blured
					if($(ev.target).hasClass('lang_code')) $(ev.target).blur();

					ev.preventDefault();
					$btn.click();
					break;
				}
				$container = $container.parent();
			}
		}
	});
});


function(){var b=a(this).val();a.xeShowMenuSelector(g,b)});a.fn.xeMenuSearch=function(){a(this).each(function(b,d){a(d).on("click",e)})};a(".module_search").xeMenuSearchHtml();a(".moduleTrigger").xeMenuSearch()});/*[20130314|TUW] Alert 재정의 해제 jQuery(function(a){try{window.alert=function(){return a.xeMsgBox.alert.apply(a.xeMsgBox,arguments)},setTimeout(function(){a("div.message.info").fadeOut(1E3)},2500)}catch(d){}});*/


※ admin.js와 admin.min.js의 차이점은 단지 압축의 유무에 있으며, 관리자 설정에 따라 서로 다른 파일이 로드되므로 반드시 둘 다 수정해 주어야 합니다.


TAG •
서비스 선택
이용중인 SNS 버튼을 클릭하여 로그인 해주세요.
SNS 계정을 통해 로그인하면 회원가입 없이 댓글을 남길 수 있습니다.
댓글
?
Powered by SocialXE

List of Articles
번호 분류 제목 글쓴이 최근 수정일 조회 수
129 Linux [VirtualBox] Windows 7 물리 디스크 부팅 (Raw Disk Booting or Native Booting) - 방법 1 file TUW 2017.06.14 2956
128 Linux [Vi/Vim] 단축키 모음 file TUW 2017.06.02 11557
127 Linux [Ubuntu] 화면캡처 및 작업공간 전환 단축키 TUW 2014.04.20 24185
126 Linux [Ubuntu] 원격 Shell에서 로그인 사용자 디스플레이에 GUI 프로그램 실행하기 TUW 2016.03.06 10084
125 Linux [Ubuntu] 서버 복구 : 설치부터 세팅까지 Quick Guide TUW 2013.07.08 15083
124 Linux [Ubuntu] 디스크 용량 확인 명령어 TUW 2014.04.20 13226
123 Linux [Ubuntu] 디스크 마운트하기 TUW 2014.04.20 36571
122 Linux [Ubuntu] 데이터 및 DB(MySQL)를 백업 및 복원하는 명령어 TUW 2014.04.20 15549
121 Linux [Ubuntu] Windows와 멀티부팅 환경에서 시간이 맞지 않는 현상 해결하기 TUW 2017.06.08 29652
120 Linux [Ubuntu] SSH 초기 접속 속도 향상시키기 TUW 2014.04.23 13826
119 Linux [Ubuntu] Bashrc Shell Prompt 커스터마이징 (.bashrc PS1) TUW 2014.04.24 22848
118 Linux [Ubuntu] 파티션 관리 프로그램 - GParted file TUW 2021.12.28 22512
117 일반 [TeraTerm] 명령줄 인수와 공개키 인증으로 간편하게 SSH 접속하기 TUW 2018.11.06 4582
116 Security [SSL/HTTPS] StartSSL/StartCom 사태와 Let's Encrypt로의 이전 1 file TUW 2021.12.28 12094
115 Security [SSL/HTTPS] Let's Encrypt 무료 SSL 인증서 발급/설치/관리 - certbot 사용법 file TUW 2021.12.28 33681
114 OrCAD [OrCAD Capture] 회로도 PDF로 출력하기 - PDF Export 활용 file TUW 2021.12.28 18039
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 ... 13 Next
/ 13

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5