Code Metaphor

Programming, Writing, Reading, Thoughts…

JavaScript에서 사용되는 에러 메세지의 폴백 처리

웹 개발을 할 때 종종 JavaScript에 대한 폴백(fallback)을 고려해야 할 때가 많다. 내가 습관적으로 신경쓰는 부분 중 하나는, JavaScript 처리에서만 사용되는 엘리먼트를 직접 출력하지 않고 JavaScript로 출력시키는 것이다. 즉,

<div id="msg" style="display: none;">오류가 났습니다!</div>

위와 같은 엘리먼트가 JavaScript의 오류 처리를 위해 직접 출력되서는 안된다. 아무리 display: none 속성을 넣었어도, CSS가 작동하지 않는 환경이라면 분명 혼란을 줄 메세지이다. 그래서 나는 아래와 같이 마크업한다.

<script type="text/javascript">
// <![CDATA[
document.write('<div id="msg" style="display: none;">오류가 났습니다!</div>');
// ]]>
</script>

JavaScript로 출력할 경우 JavaScript가 작동하지 않는 환경이라면 완벽하게 출력되지 않을 것이다. (폴백을 고려할 때 가장 유의할 점은, 기능에 대한 폴백은 기능 자체를 테스트하는 것으로 제공 여부를 확인해야 한다는 것이다.) 다만 저것이 서버쪽 스크립트와 섞이고, 메세지에 작은 따옴표도 들어가고, 복잡한 마크업으로 바뀐다면 코드가 지저분해진다.

최근 RoR에서 헬퍼(helper) 메서드를 작성하면서, 이것을 블럭(block) 구문으로 처리하면 굉장히 편할 것 같다는 생각이 들었다. 그래서 작성해봤다.

def javascript_output
  %{<script type="text/javascript">
  // &lt;![CDATA[
  document.write('#{yield.gsub("'", "\\'").gsub("\n", "\\n").gsub("]]>", "]' + ']>")}');
  // ]]>
  </script>}
end

eRuby에서 깔끔하게 사용할 수 있다.

<% javascript_output do -%>
  <div id="msg" style="display: none;">오류가 났습니다!</div>
<%- end %>

나는 과거 PHP에서 저것과 같은 기능의 헬퍼를 작성한 적 있었다. 시작과 끝을 담당하는 함수 둘을 작성하고, 출력 제어를 하는 등 난리 법석을 떨었던 것이 기억난다.

언어는 단지 도구일 뿐이다, 장인은 도구를 가리지 않는다—여러 말 많지만, 더 좋은 도구 냅두고 덜 좋은 도구 고집하는 것도 장인 정신은 아닐 것이다.

덧. 난 Ruby를 별로 좋아하지 않는다.

This entry was posted on December 11, 2006 at 12:55 AM. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

One Response to “JavaScript에서 사용되는 에러 메세지의 폴백 처리”

  1. 재식 Says:

    기업의 요구나 그런것에 따라서 어쩔수 없이 언어를 선택할수 없는 경우도 굉장히 많지. 특히 외주일을 하는 경우 이런일이 비일 비재하고.. 다만 자신 개인에 있어서는 언어를 다루는 데 있어서 가리는게 있어서는 안된다고 생각함. 좋은 언어를 배운다는게 단순히 그 언어를 사용하는데를 떠나서 기존 언어의 사용능력을 더 향상 시키는데도 도움을 주기도 하니까. 얼마전에 회사에서 우리팀이 바쁘다는 이유로 무려 7년 경력이라는 외주인한테 어떠한 작업을 맡았는데.. 이걸 유지보수 할려고 구조를 열어보니까 어이가 없더라고. 7년동안 발전이라곤 전혀 하지 않은 듯 한 내부구조. 알고보니까 그사람 언어에 있어서는 php만 써온거 같더군.. 후우. (-_-) php가 언어상 좆구려도 환경의 이점이나, 초기 접근이 쉬운 이유로 많이들 스타트를 밟는게 사실이지만 거기서 머무면 그냥 병신으로 남을 뿐이 아닌가 하는걸 깨달을수 있었음..

Powered by WordPress. Styled by Hong, MinHee. XML Feed, Comments XML Feed.