[질문] IE 의 window.name

국내에 웹 사이트들이 웹 표준을 지키고 OS나 브라우저와 관계 없이 접근성을 향상 시키기 위한 사이트 버그 신고 및 문제 해결을 위한 게시판입니다.
Post Reply
MuMbi준환

[질문] IE 의 window.name

Post by MuMbi준환 »

opener 에서 새 창을 띄웁니다.

새 창의 form 에서 opener 로 submit 하려면

IE 에서는 form.target = opener.name 또는

opener에서 window.name="main" 이런식으로 정해놓고

form.target = "main"

이렇게 하면 자식창에서 opener 로 submit 이 됩니다.

FF 에서는 안되는데 FF 에서는 어떤 방법이 있나요 궁금합니다.
hyeonseok
해커
해커
Posts: 691
Joined: 2004 08 11 22:14 59
Contact:

Post by hyeonseok »

폼이나 윈도우 엘리먼트 참조에 문제가 있어서 그런 것 같습니다.
보통 과도하게 문법을 축약해서 사용하면 그렇습니다.
아래와 같이 하시면 부모창에서 자식창으로, 자식창에서 부모창으로 작동을 시킬 수 있습니다.

부모창
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>opener</title>
</head>
<body>
<h1>opener</h1>
<form name="openerForm">
<input type="text"/>
<input type="submit"/>
</form>
<input type="button" value="팝업 서밋" onclick="popForm.document.forms.popupForm.submit()" />
<script type="text/javascript">
var popForm = window.open("popForm.html", "popForm", "width=300, height=200");
</script>
</body>
</html>

자식창
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>pop form</title>
</head>
<body>
<h1>pop form<h1>
<form name="popupForm" onsubmit="alert('서밋되었습니다.');">
<input type="text"/>
<input type="submit"/>
</form>
<input type="button" value="opener 서밋" onclick="opener.document.forms.openerForm.submit()" />
</body>
</html>
MuMbi준환

질문을 잘못이해하신거 같습니다.

Post by MuMbi준환 »

질문을 잘못이해하신거 같습니다.

부모창이 자식창의 form 을 제어하는 질문이 아닙니다.

제 질문의 요지는 자식창의 form 의 target 을 부모창으로 잡는것입니다.

IE의 경우 name property 를 지정하면 target 으로 submit 이 되는데

FF 의 경우는 무반응입니다. 스크립 에러도 없고..

다시 한번 고려해주시면 고맙겠습니다.
박민권
해커
해커
Posts: 724
Joined: 2005 01 31 22:33 55
Location: 대한민국
Contact:

Re: [질문] IE 의 window.name

Post by 박민권 »

MuMbi준환 wrote:opener 에서 새 창을 띄웁니다.

새 창의 form 에서 opener 로 submit 하려면

IE 에서는 form.target = opener.name 또는

opener에서 window.name="main" 이런식으로 정해놓고

form.target = "main"

이렇게 하면 자식창에서 opener 로 submit 이 됩니다.

FF 에서는 안되는데 FF 에서는 어떤 방법이 있나요 궁금합니다.
음... 이상하네요. 문제 없습니다. 오타를 확인해보세요. ^^;
아래는 제가 테스트한 소스 입니다.

Code: Select all

===1.html===

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
   <head>
      <script type="text/javascript">
      function test(){
      	window.open('about:blank','win','');
      	window.name="mywin"
      	document.frm.target='win';
      	document.frm.submit();
      }
      </script>
   </head>
   <body>
   	<form name="frm" action="2.html" target="">
      		<input type="button" onclick="test()" value="클릭"/>
      	<form>
   </body>
</html>

Code: Select all

===2.html===

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
   <head>
      <script type="text/javascript">
      function test(){
      	document.frm.target=window.opener.name;
      	document.frm.submit();
      }
      </script>
   </head>
   <body>
   	<form name="frm" action="http://www.google.co.kr" target="">
      		<input type="button" onclick="test()" value="클릭"/>
      	<form>
   </body>
</html>
1.html이 팝업을 띄운후 폼 액션을 전송하여 2.html을 띄우고
2.html이 1.html에 마찬가지로 폼 액션을 전송하여 구글페이지를 띄우는 예제입니다.
MuMbi준환

self.close();

Post by MuMbi준환 »

저는 javascript 을 사용하지 못하는 환경에서도 form 을 전송하기 위해

onsubmit 이벤트를 이용합니다.

onsubmit 시 호출되는 함수 내용 중

Code: Select all

_form.target = window.opener.name;

self.close();

return true;
이 code 로는 IE 에서는 되고 FF 에서는 안되었습니다.

self.close();

를 지우니까 FF 에서도 되는군요.

FF 에서는 self.close() 이 후의 code 를 실행하지 않는듯 합니다.

근데 이 popup window 를 꼭 닫아야되는데..

방법을 찾을 수가 없네요..

방법 아시면 도움 좀 부탁드리겠습니다.
박민권
해커
해커
Posts: 724
Joined: 2005 01 31 22:33 55
Location: 대한민국
Contact:

Re: self.close();

Post by 박민권 »

MuMbi준환 wrote:저는 javascript 을 사용하지 못하는 환경에서도 form 을 전송하기 위해
onsubmit 이벤트를 이용합니다.
무슨 뜻인지 한참 고민했습니다.
즉, 폼값을 전송할때 스크립트로 전송하면 스크립트가 안되는 브라우저 일 경우
전송이 안되기 때문에 스크립트가 안되는 곳은 평범한 전송버튼으로 전송이 되고
스크립트가 되는 곳은 onsubmit을 이용하여 몇가지 편의(부모창 전송 후, 창닫기)
를 제공하시겠다는 뜻이죠? :)

아무생각 없이 스크립트 도배하여 접근성을 떨어뜨리는 개발자도 많은데 이런 작은
부분까지 신경쓰시는 군요. 멋지십니다. :)

MuMbi준환 wrote: FF 에서는 self.close() 이 후의 code 를 실행하지 않는듯 합니다.

근데 이 popup window 를 꼭 닫아야되는데..

방법을 찾을 수가 없네요..

방법 아시면 도움 좀 부탁드리겠습니다.
이렇게 하면 어떨까요?

Code: Select all

_form.target = window.opener.name;
_form.submit(); //닫히기 전에 스크립트로 전송한다.
self.close(); //닫는다.
MuMbi준환

onsubmit 이벤트..

Post by MuMbi준환 »

onsubmit 을 이용한다는 의미는 input type elements 중에 button 이 아닌 submit 을 이용한다는 의미입니다.

button type 을 사용할 경우 input tag 에 onclick 이벤트로 접근해서

check 하고 submit() 을 해줍니다.

이 경우 script 가 막힌 설정의 browser 의 경우 submit 이 안되는 경우가 있습니다.

이 경우를 피하기 위해

submit type 을 사용할 경우 form 의 onsubmit 이벤트로 접근합니다.

submit type 을 사용할 경우 script 오류가 있더라도 submit 됩니다.

궁극적인 의미는 잘 모르겠습니다만;; onsubmit="return checkfunc(this)" 이런식으로 return 을 사용해야 합니다. 안그러면 오류가 나더군요;;

checkfunc() 에서는 submit() 메쏘드를 사용하는게 아니라

return true; 로 submit 을 해야하죠.

여기서 저의 문제가 발생한 것이죠-_-

submit() 메쏘드는 모르겠으나 return 은 script 를 종료시키죠-_-;;

return 후 close() 메쏘드는 무시된다는 말씀을 드리고 싶었습니다;;
박민권
해커
해커
Posts: 724
Joined: 2005 01 31 22:33 55
Location: 대한민국
Contact:

Re: onsubmit 이벤트..

Post by 박민권 »

MuMbi준환 wrote:onsubmit 을 이용한다는 의미는 input type elements 중에 button 이 아닌 submit 을 이용한다는 의미입니다.

궁극적인 의미는 잘 모르겠습니다만;; onsubmit="return checkfunc(this)" 이런식으로 return 을 사용해야 합니다. 안그러면 오류가 나더군요;;

checkfunc() 에서는 submit() 메쏘드를 사용하는게 아니라

return true; 로 submit 을 해야하죠.

여기서 저의 문제가 발생한 것이죠-_-

submit() 메쏘드는 모르겠으나 return 은 script 를 종료시키죠-_-;;

return 후 close() 메쏘드는 무시된다는 말씀을 드리고 싶었습니다;;
잘 이해하고 있습니다. ^^
<form onsubmit="">을 이용해서 스크립트가 안되더라도 submit이 가능케 하려하시는 것도 알고 있고 그래서 멋지시다고 한 것이구요.

return true;로 submit을 하게 되면 self.close();를 실행할 수 없기 때문에

Code: Select all

function test(){
    document.frm.submit(); //전송후
    self.close(); //창닫기
}

<form name="frm" onsubmit="test();">
를 권해드렸던 것입니다.
스크립트가 동작 안하더라도 전송에는 문제가 없겠죠.

그런데 제가 막상 테스트 해보니 전송을 다 마치기도 전에 창이
닫혀버려서 결과는 전송이 되지를 않습니다.
좀더 생각해 봐야할 문제 같습니다.
박민권
해커
해커
Posts: 724
Joined: 2005 01 31 22:33 55
Location: 대한민국
Contact:

이런 꽁수도

Post by 박민권 »

별로 마음에 들지 않는 꽁수지만

setTimeout('self.close()',2000);

이런식으로 전송후 좀 뒤늦게 닫히도록 할수도 있겠습니다.
근데 마음에 안드네요.
MuMbi준환

Re: 이런 꽁수도

Post by MuMbi준환 »

박민권 wrote:별로 마음에 들지 않는 꽁수지만

setTimeout('self.close()',2000);

이런식으로 전송후 좀 뒤늦게 닫히도록 할수도 있겠습니다.
근데 마음에 안드네요.
정말 감사합니다^^

PHPSCHOOL.COM 에도 비슷한 글을 올렸는데..

민권님과 같은 답변을 해주셨습니다.

setTimeout('self.close()', 0);

이렇게 하니까 되네요;;

참 난감한 경험입니다.

문제는 어떻게 해결했지만 먼가 아쉬움이 많이 남는-_- 문제였습니다.

끝가지 신경써 주셔서 정말 감사합니다.

비도 많이 오는데 날씨 조심하시고 건강하세여 ^^
박민권
해커
해커
Posts: 724
Joined: 2005 01 31 22:33 55
Location: 대한민국
Contact:

Re: 이런 꽁수도

Post by 박민권 »

MuMbi준환 wrote: setTimeout('self.close()', 0);

이렇게 하니까 되네요;;

참 난감한 경험입니다.

문제는 어떻게 해결했지만 먼가 아쉬움이 많이 남는-_- 문제였습니다.
질문을 올리는 사람들중 왜 불여우는 IE에서 되는 스크립트가 안되냐며
불여우가 나와서 고생한다는 듯이, 혹은 불여우는 아직 멀었다는 듯이
이야기 하시는 분들이 있습니다.

IE의 너무나 단축되고 간결한 스크립트 코딩 방식에 익숙해져서 오히려
규칙에 맞는 표준 스크립트 코딩을 싫어하는 사람도 많습니다.

님과 같이 문제를 해결하기 위해 노력하고 여러 사람들과 같이 해결해
나가는 것 재밌습니다.

'불여우 그거 안돼요. 그냥 익스쓰셈' 이라고 말하는 엉터리 개발자보다
문제를 해결하기 위해 노력하는 개발자가 많아지면 좋겠습니다.
MuMbi준환

^^

Post by MuMbi준환 »

요즘 개발자들 사이에서 표준 이 이슈죠.. ㅎㅎ

xthml 과 css..

현존하는 브라우저중 그나마 표준에 비슷하게 맞추어 가는 것이 불여우가 아닌가 생각이 듭니다.

지금은 백수지만;; 저번에 다녔던 회사는 표준 따윈-_- 언급도 없습니다.

걍 커스터마이징 들어오면 대충 어디서 소스 주서다 붙이고.. 이런식으로..

모질라 FF 따위는 설치되어있지도 않습니다. ㅋㅋ

취직하기는 힘들겠지만 그런 회사는 들어가기가 좀 꺼려지네요 ^^

아무리 시간 단축해서 돈버는 거지만 개발자들 관리하는 업체들이 바뀌어야

개발자들이 이런 문제들에 더욱 많이 접근할수 있을거같습니다.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest