오늘 검색을 하다가 재밌는 것을 발견했는데, 기본검색에서 검색어를 입력하지 않아도 검색이 된다는 점이었다.

레프트21 기본 검색 창

△이대로 검색버튼을 눌러도 검색이 된다.

그래서 짬을 내 한 번 수정해 봤다.

일단, 최근 알게 된 자바스크립트 기술을 참고했다. html에 자바스크립트를 첨가하지 않고 id만으로 제어하는 기술이다.

위 기술에서는 두 가지 방법을 제공한다. 하나는 아래 같은 코드를 사용한다.

<a id="my-link" href="http://www.opera.com/">My link</a>

<script type="text/javascript">
  document.getElementById("my-link").onclick = waveToAudience;
    function waveToAudience() {
      alert("Waving like I've never waved before!");
    }
</script>

다른 하나는 addEventListener(표준)와 attachEvent(IE)라는 매서드인데, IE를 따로 신경써 줘야 하기 때문에 귀찮아서 앞의 방법을 사용했다.(jQuery 등 자바스크립트 프레임워크를 사용하면 알아서 처리해 준다고 한다.)

자바스크립트쪽 처리

코드를 뜯어보면 알겠지만 간단하다.

document.getElementById("defaultSearch").onsubmit = basicSearch;
function basicSearch() {
 var keyword = document.frm_search.keyword.value;
  if(keyword==null || keyword==''){
   //alert('검색어를 입력해 주세요');
    document.frm_search.keyword.focus();
    return false;
 }else{
    document.frm_search.submit();
 }
}

이렇게 코드를 첨가했다. form HTML은 굳이 쓰지 않겠다.

alert을 처음에는 띄웠다가 주석처리했다. 굳이 알려주지 않아도 사람들이 알 것이라고 생각해서다. 대신에 포커스를 검색창으로 주도록 처리했다.

서버쪽 처리

최근에 관심갖고 있는 것은 접근성에 관련한 것이다. 자바스크립트 관련한 접근성 이슈는, 한마디로 요약하면 “자바스크립트를 사용하지 않는 사람들에게는 어떻게 접근성을 보장할 거냐?”다.

다음은 자바스크립트를 잘 고려해서 사용하는 이유의 목록이다. ‘겸손한 자바스크립트의 원리’에서 인용한 것이다.

  • 일부 브라우저는 자바스크립트를 지원하지 않거나, 혹은 너무 오래되었기 때문에 당신의 스크립트를 완전히 무시할 수 있다.
  • 브라우저에서 스크립트를 지원한다 하더라도, 사용자들이 보안상의 이유로 스크립트를 꺼 두었을 수 있고, 혹은 그들이 근무하는 회사의 방화벽이 모든
  • 브라우저에서 스크립트를 지원한다 하더라도, DOM 명세의 일부분을 독자적으로 해석/지원하여 결과적으로는 당신의 스크립트 중 일부분만을 이해할지도 모른다(IE가 종종 이런 종류의 잘못을 저지른다).
  • 스크립트가 완전히 해석되었다고 하더라도, 굉장히 복잡한 HTML에 기반해 있으며 HTML은 (스크립트 제작자가) 예측하지 못한 방법으로 바뀔 수 있다.
  • 당신의 프로그래밍 문맥이 완벽한 HTML에 의해 축복받았다고 하더라도, 당신은 사용자들이 어떤 입력장치를 가지고 페이지를 브라우징할 지 확신할 수 없다. 상당수의 스크립트들이 마우스를 사용할 수 있을 때에만 동작하며, 마우스 대신 키보드를 쓰는 사용자들에 대해서는 잊고 있다(장애를 가진 사람들 중 상당수는 마우스를 사용할 수 없으며, 어떤 사람들은 키보드를 더 선호한다).
  • 당신의 스크립트가 위에서 언급한 모든 문제들을 전부 해결했고 또한 완벽하게 동작한다 하더라도, 다른 프로그래머들이 그것을 이해하지 못할 수도 있다.

그래서 이번에 나도 야심차게 이 원리에 맞춰 장치를 했다. 자바스크립트가 키워드 없이 검색한 것을 인지하지 못하고 빈 키워드를 서버쪽으로 보내면 어떻게 할 것인가?

간단하다. 다음을 보라.

검색에 사용하는 파일은 3_search.php다. 여기에 다음 세 줄을 넣었다.

if($_GET[keyword]==''){
 header('location: ' . $_SERVER[HTTP_REFERER]);
}

키워드 없이 올 경우에는 방금 온 곳($_SERVER[HTTP_REFERER])으로 돌려보내도록 처리했다.

단상

사소한 부분이긴 하지만 이런 배려들은 자신을 발전하게 한다고 본다.

만약 사용자들이 실수로 검색어를 넣지 않고, 검색 버튼을 눌렀을 때라면? 그럴 때 얌전히 포커스가 검색창에 가 있다면 사용자들은 당황하지 않고 검색어를 넣을 것이다.

자바스크립트를 꺼놓고 사용하는 사용자가 실수로 검색 버튼을 눌렀다면? 다시 원위치로 돌려보내는 게 인지상정일 것이다.

우리 쪽 이득

사소하지만 관리하는 내 입장에서도 좋은 점이 있다.

사용자들의 이용 양태를 분석할 때, 실수로 누른 검색을 통계에 포함하지 않게 되는 이점이 있게 된다. 그렇다면 통계가 좀더 정확해질 것이다.