본문 바로가기

IT/SCRIPT

(펌)iframe 에 링크된 페이지의 링크가 깨졌을 경우 체크하기











간혹 웹페이지에 iframe 태그를 이용해 외부 사이트의 링크를 거는 경우가 있다.
이때, 외부 사이트의 링크가 깨지면, 해당 iframe 에 에러가 발생해서 보기가 좋지 않다.
그렇다면, 링크가 깨진 경우를 체크해서 표시해 주는 방법은 없을까?
정상적인 방식은 아니고 꼼수를 이용해서 처리하는 방법을 생각해보자.
일단, 링크가 깨지면 해당 링크 사이트의 페이지가 로딩이 안되는 상태이다.
브라우저는 링크를 호출하고 일정 시간이 지나서 그 사이트에서 응답이 없으면 윈도우 자체에 내장된 에러 페이지를 보여준다.
정확하지는 않지만, 대략 5초 이상의 시간을 대기하는데, 해당 웹사이트가 외국에 있거나 해서 로딩이 아주 느린 경우가 아니라면 보통 2~3초면 페이지가 로딩된다고 볼 수 있다.
따라서, 2~3초 정도 여유를 두고 기다렸다가, 페이지가 로딩이 되었는지 체크한 후, 아직 로딩이 안 되었으면 링크가 깨졌다고 볼 수 있다.(정확한 방법은 아님)
그런 개념에 따라 아래와 같은 스크립트를 만들 수 있다.

<div id="div1" name="div1"></div>

<input type="hidden" value="" id="ifrchkbox" name="ifrchkbox">

<script language="javascript">
var ifrurl = "지정한 링크 사이트의 주소";
function ifrload(){
  try{
  div1.innerHTML = "<iframe name='ifr1' id='ifr1' onload='ifrerrchkon();' allowtransparency='true' src='"+ifrurl+"' ></iframe>";
  setTimeout("ifrchk();",3500);
  }catch(e){}
}
ifrload();
function ifrerrchkon(){
  //로드 되었음(링크가 깨질 경우 시간이 지연됨.
  ifrchkbox.value="1";
}
function ifrchk(){
   if(ifrchkbox.value!="1"){
      div1.innerHTML="해당 사이트가 작업중입니다.";
   }
}
</script>

설명을 붙이자면,
iframe 에 onload 이벤트를 걸어준다.
이 이벤트는 iframe 에 지정한 링크(src)가 로딩이 완료되면 동작한다.
즉, 로딩이 완료되면 ifrerrchkon() 가 동작하여 ifrchkbox 라는 이름을 가진 input 박스에 1 이라는 값을 넣어준다.
따라서, 해당 링크가 깨지면 input 박스에 1 이라는 값이 기록되는 시간이 5초 이상 걸리게 된다.
그런데, iframe 를 넣어주는 스크립트 하단에 setTimeout("ifrchk();",2000); 라는 스크립트를 넣어주었다.
즉, 2초(2000)가 지나면 ifrchk() 를 실행시키라는 것이다.
2초가 지나서 ifrchk() 가 실행되고, input 박스에 1 이라는 값이 기록되어 있는지 체크하는 것이다.
링크가 깨지면 1 값이 기록되는데 5초 이상 걸리기 때문에, 아직 값이 기록되지 않았다면 해당 링크가 깨졌다고 볼수도 있는 것이다.
그러면, 1 값이 기록되어 있는지 체크해서 아직 기록되지 않았다면 링크가 깨졌다는 메세지를 보여주는 방식이다.

P.S.
애시당초 2초 정도로 설정했었는데, 너무 짧은것 같고,
약 3.5초 정도로 설정하는게 좋을것 같다.