1. get 방식
부모창의 자바스크립트
function showMap(mapAddr){
var f = document.form;
f.mapAddr.value = encodeURL(mapAddr);
window.open("showMap.jsp?mapAddr="+mapAddr,"","width=500,height=570");
}
이 방법을 써봤지만 이방법엔 치명적인 문제점 이있다. 한글 값일 경우 넘어갈때
왜인지 모르지만 깨진다는 것이다. URL encoding을 해도 마찬가지의 경우가
벌어졌다. 그래서 좀 더 발전적인 방법을 사용해 보았다.
2. post 방식
function showMap(mapAddr){
var f = document.form;
f.mapAddr.value = encodeURL(mapAddr);
window.open("","child","width=500,height=570");
f.target = "child";
f.action = "showMap.jsp";
f.submit();
}
//////////////////////////////////////////////////
<form name="form" action="menu.jsp" method="post">
<input type="hidden" name="mapAddr">
자바 스크립트 코드를 아시는 분들이라면 금방 이해가 되실것이다.
한글 값을 input type=hidden 인 값에 넣고 post 방식으로 전달해 버린것이다
이러면 한글도 안깨지고 무난히 해결되었다.
정말 안되서 고생 고생하다 된거라 아마도 쉽게 안잊혀질 듯 하다.
혹시나 자바스크립트 url 인코딩 함수를 원하시는 분이 계실까봐 밑에 첨부한다.
//url 인코딩
function encodeURL(str){
var s0, i, s, u;
s0 = ""; // encoded str
for (i = 0; i < str.length; i++){ // scan the source
s = str.charAt(i);
u = str.charCodeAt(i); // get unicode of the char
if (s == " "){s0 += "+";} // SP should be converted to "+"
else {
if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){ // check for escape
s0 = s0 + s; // don't escape
}
else { // escape
if ((u >= 0x0) && (u <= 0x7f)){ // single byte format
s = "0"+u.toString(16);
s0 += "%"+ s.substr(s.length-2);
}
else if (u > 0x1fffff){ // quaternary byte format (extended)
s0 += "%" + (0xf0 + ((u & 0x1c0000) >> 18)).toString(16);
s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
}
else if (u > 0x7ff){ // triple byte format
s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
}
else { // double byte format
s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
}
}
}
}
return s0;
}
부모창의 자바스크립트
function showMap(mapAddr){
var f = document.form;
f.mapAddr.value = encodeURL(mapAddr);
window.open("showMap.jsp?mapAddr="+mapAddr,"","width=500,height=570");
}
이 방법을 써봤지만 이방법엔 치명적인 문제점 이있다. 한글 값일 경우 넘어갈때
왜인지 모르지만 깨진다는 것이다. URL encoding을 해도 마찬가지의 경우가
벌어졌다. 그래서 좀 더 발전적인 방법을 사용해 보았다.
2. post 방식
function showMap(mapAddr){
var f = document.form;
f.mapAddr.value = encodeURL(mapAddr);
window.open("","child","width=500,height=570");
f.target = "child";
f.action = "showMap.jsp";
f.submit();
}
//////////////////////////////////////////////////
<form name="form" action="menu.jsp" method="post">
<input type="hidden" name="mapAddr">
자바 스크립트 코드를 아시는 분들이라면 금방 이해가 되실것이다.
한글 값을 input type=hidden 인 값에 넣고 post 방식으로 전달해 버린것이다
이러면 한글도 안깨지고 무난히 해결되었다.
정말 안되서 고생 고생하다 된거라 아마도 쉽게 안잊혀질 듯 하다.
혹시나 자바스크립트 url 인코딩 함수를 원하시는 분이 계실까봐 밑에 첨부한다.
//url 인코딩
function encodeURL(str){
var s0, i, s, u;
s0 = ""; // encoded str
for (i = 0; i < str.length; i++){ // scan the source
s = str.charAt(i);
u = str.charCodeAt(i); // get unicode of the char
if (s == " "){s0 += "+";} // SP should be converted to "+"
else {
if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){ // check for escape
s0 = s0 + s; // don't escape
}
else { // escape
if ((u >= 0x0) && (u <= 0x7f)){ // single byte format
s = "0"+u.toString(16);
s0 += "%"+ s.substr(s.length-2);
}
else if (u > 0x1fffff){ // quaternary byte format (extended)
s0 += "%" + (0xf0 + ((u & 0x1c0000) >> 18)).toString(16);
s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
}
else if (u > 0x7ff){ // triple byte format
s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
}
else { // double byte format
s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
}
}
}
}
return s0;
}
'JAVASCRIPT > 부모창에서 자식창으로 값전달' 카테고리의 다른 글
[ JAVASCRIPT ] iframe 에서 부모창과 자식 창의 함수 호출 (3) | 2012.11.26 |
---|
댓글