Monthly Archives: February 2009

세번째 웹 표준의 날 후기

지난 주 토요일(2월 7일) 한국정보문화진흥원에서는 CDKclearboth가 주최한 제 3회 웹 표준의 날 모임이 있었습니다.
이번 모임은 “웹 표준을 넘어서” 라는 부제로 만든 자리였고 많은 분들이 이제는 공감 이상의 몸으로 느끼고 있는 웹 표준에 대해 그 후에 알고 대처해야 할 것들과 웹 접근성과 사용성 대해 발표하고 서로 대화하는 자리였습니다.

너무 오랜만에 생긴 모임이라 어찌나 반가웠던지 모임 안내글을 올리고 신청자를 받기위한 페이지를 등록하자마자 하루만에 선착순 인원이 마감되어 버리는 일이 발생했다고 합니다.

세번째 웹표준의 날 신청자 마감

후기는 그날 그날 바로 적어주면 좋겠지만 좀 늦은 관계로 이미 많은 후기가 올라와 있고 워낙에 나름 뿌듯하고 좋았기 때문에 더 적을 말이 생각나지 않지만 발표를 해준 찬명님, 지호님, 성민님, 현진님, KADO(한정기님, 문준기님), 조훈님, 현석님 그리고 사회와 발표와 이 모임을 할 수 있도록 힘써주신 윤표님께 너무 고맙고 아직 선배라고 할 수 없는 저에게 함께 할 수 있는 기회를 줘서 감사하다는 말 전하고 싶습니다.
그리고 스스로 스피커 겸 사진기사 활동을 해준 봄눈님께 감사 드리며(사진은 봄눈님 블로그에서 참고) 아침 일찍부터 해가 떨어질때까지 불만한번 하지 않고 열심히 도와주신 자원봉사 분들도 너무 감사드립니다.

다음 모임을 기다리며 참여했던 모든 분들이 조금이나마 서로를 의지하고 좋은 정보와 만남을 가질 수 있었던 자리였으면 좋겠습니다.
모두 수고하셨습니다. 🙂

IE, 7부터 바뀐 디자인보안 정책

2006년 12월 즈음 IE7이 출시되고 있던 것으로 기억된다.
(아마도 beta기간이 아니었나 싶다..)
당시 내가 속한 회사에서 제작 중이던 웹 사이트는 링크의 url을 기본적인 사이트 주소를 넣거나 #에 name을 붙여서 이동 하게 하거나 javascript로 이동하는 링크를 사용 했었다. 아마 대부분의 사이트에서 페이지 이동이나 컨텐츠 이동을 이렇게 하지 않았을까?

Link의 Pseudo Class :visited
IE가 아닌 브라우저를 이용해 웹 페이지를 제작해 본 사람이라면 링크의 url 경로가 스크립트로 구성 되어 있으면 :visited style이 적용 되지 않는다는 것은 잘 알 고 있을 것이다.
link의 pseudo-class중 :visited란? user agents에서 한번이라도 방문을 했는지 안 했는지를 구분하여 방문 하지 않은 페이지라면 :link로 인식 할 것이고 방문했다면 :visited로 인식하는 것을 말한다.(방문여부는 IE6 이하에서는 javascript 로 넘기는 링크라도 :visited를 인식하는 것을 보면 브라우저마다 기준이 다르지 않을까..?)

그렇다면 방문기록이 남을 수 없는 javascript로 이동한 경로는 그렇다 치더라도 #name으로 이동한 페이지는 방문 기록이 남게 된다.
웹사이트 방문기록 리스트
정상적이라면 방문기록과 href 의 url값을 비교하여 같다면 :visited로 인식이 되어야겠지만 IE7은 그렇게 되지가 않는다. 왜 그럴까?
그 당시 CDK에 글도 올려 보고 여러 사람들과 논의도 해 봤지만 그다지 중요하다는 생각이 들지 않는지 소리소문 없이 사라져 버렸는데 최근에 다시 듣게 되어서 정리하게 됐다.

CDK의 글을 보면 MS고객문의 답변 내용이 있는데 그 당시에는 답변에 대해 정확하게 정리가 되지 못하다 보니 고객문의 글을 100% 이해하기가 힘들었다. 특히 design이라는 단어가 뭘 뜻하는지 전혀 몰랐던 지라.. 그대로 묻혀 버렸는데 IE8에서도 동일하게 발생하고 있다 기에 다시 문의를 해본 결과 조금은 더 상세하게 답변을 들을 수 있었다.

답변 내용은…

[제목]
IE7: script에서 css visited 속성 사용할 수 없음.

[요약]
IE 7.0에서 CSS a:visited 속성을 기술해 주어도 href 에 # 이 들어가거나 javascript:xxx 형식으로 기술되면 기술된 속성이 반영되지 않아 색깔 구분이 안됨
샘플예제
<style> a:visited { color:blue } </style> <a href=”a.htm”> <– 정상동작
<a href=”javascript:showDetail(‘b.htm’)”> <– a:visited CSS 반영안됨
<a href=”#b” onclick=”javascript:showDetail(‘b.htm’)”> <– a:visited CSS 반영안됨

[원인]
Internet Explorer 7 의 강화된 보안 디자인으로 인한 현상으로, IE7 에서는 script 내에서 url history 정보를 보지 못하도록 디자인 변경되었습니다.
이로 인해 script 에서 CSS style 의 visited 속성이 적용되지 않는 것입니다.

[해결 방법]
고객사에서 관련 코드 수정하여 문제 해결.

제목이 script 사용으로 :visited가 안된 다고 되어 있지만 #이 들어도 마찬가지다.
좀 더 내용을 추가하자면 스크립트를 이용하여 이전 history 정보를 악용한 악성 사례들이 있어서 IE7 부터는 의도적으로 막았다고 한다.
자주 일어나는 일이 아니라서 잊혀져 있었던 일인데 원인을 확실히 알게 되어서 좋지만 이런 이유로 #name으로 이동하거나 링크 이동 후 자동으로 위치로 이동하기 위해 사용했던 링크 주소 방식은 방문기록에는 남지만 :visited로 인식하지 않는다니 아쉬움 생긴다.

해결방법?
IE에서는 보안정책이 강화되어 바꿀 수 없다고 하니 코드방식을 바꿔야 하지만 원천적으로 경로#name 을 인식하지 않게 되었으니 :visited를 인식할 수 있는 방법은 없을 것 같다
MS에서 제공해준 해결 방법이 있지만 사용하고 싶지 않은 건 나 뿐일까….;;