실시간 쪽지 - java script 값을 저장하는게 좀 이상해서요 ㅠ..ㅠ > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

실시간 쪽지 - java script 값을 저장하는게 좀 이상해서요 ㅠ..ㅠ 정보

실시간 쪽지 - java script 값을 저장하는게 좀 이상해서요 ㅠ..ㅠ

본문

정권짱님의 실시간 쪽지 기능을 수정하고 있습니다.
 
빨간 색으로된 memo_old라는 변수는 현재까지 읽지 않은 쪽지갯수를 저장하고 있어야 하는 것이죠.
 
그런데 page가 refresh가 되면 다시 0으로 셋팅이 되기 때문에 계속해서 쪽지를 보라는 알람이 나오게
됩니다. 실제로는 1번만 보여줘야 하는 것인데요. 이런 경우 page가 refresh가 되어도 java script에
있는 변수값을 유지하려면 어떻게 해야 하는 것인가요???
 
<?
/*************************************************/
/*           실시간 쪽지 - 그누보드              */
/*  프로그램 by 정권짱, pooka, 불당              */
/*                                               */
/*  realtime_memo_total(전체쪽지수)              */
/*  realtime_memo_new(새로운쪽지수)              */
/*************************************************/
include ("./_common.php");
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
$replace_time = 5000; // 쪽지정보 새로고침 시간간격 (약5초)
?>
<script type="text/javascript" language="javascript">
var xmlHttp;
var memo_alarm = 1; <!-- 1이면 음성알람 활성화, 0이면 비활성화 -->
var memo_new = 0;
var memo_old = 0;
startRequest();
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
   
function startRequest() {
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("GET", "<?=$g4[bbs_path]?>/realtime_memo_connect.php", true);
    xmlHttp.send(null);
}
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            var xmlDoc = xmlHttp.responseXML;
            var xml_total = xmlDoc.getElementsByTagName("total")[0];
            var xml_new = xmlDoc.getElementsByTagName("new")[0];
            var tag_total = xml_total.childNodes[0].nodeValue;
            var tag_new = xml_new.childNodes[0].nodeValue;
            memo_new = tag_new;
//           document.getElementById("realtime_memo_new").innerHTML = memo_old;
            if(memo_alarm == 1) {
                if(memo_new > memo_old) { document.getElementById("memo_alarm").innerHTML = "<embed menu=false src='<?=$outlogin_skin_path?>/Kim_Ae-ni_ver.swf' quality=high pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width=0 height=0>";
              do_check();
              msn_position();
            }
            }
            memo_old = memo_new;
            setTimeout("startRequest()", <?=$replace_time?>);         
   
        }
    }
}
</script>
<!--  레이어로 쪽지창 표시 시작 -->
<script language="JavaScript1.2">
 var msn_closed    = true;
 var msn_top = 0;
 var msn_left = 0;
 var msn_divheight = 165;
 var msn_divwidth  = 1024;
function do_check () {
 msn_closed    = false;
}
function msn_position() {
 if(!msn_closed) {
  msn_top = document.body.scrollTop + document.body.clientHeight - msn_divheight;
  msn_left = document.body.clientWidth - msn_divwidth;
  document.all.kissme.style.top = msn_top;
  document.all.kissme.style.left = msn_left;
  document.all.kissme.style.display = "";
    }
  }
 var old_ResizeHandler = window.onresize;
  window.onresize = new Function("{if (old_ResizeHandler != null) old_ResizeHandler(); msn_position();}");
 var old_ScrollHandler = window.onscroll;
  window.onscroll = new Function("{if (old_ScrollHandler != null) old_ScrollHandler(); msn_position();}");
function hideLayer(layer) {
  if(document.layers) {
  layer = eval('document.layers.' + layer);
  if(layer.display != 'none') layer.display = 'none';
    else layer.display = '';
    return;
    }
  layer = document.all[layer];
  if(layer.style.display != 'none') {
  layer.style.display='none';
    }
  else {
  layer.style.display='';
    }
msn_closed = true;
}
</script>
<div id="kissme" name="kissme" style="position:absolute; overflow: hidden; top:10; left:10; z-index: 999999; display: none; width:203; height:165; layer-background-color:rgb(255,204,255);">
 <table width="193" border="0" cellspacing="0" cellpadding="0" class="message01">
  <tr>
    <td height="33"><img src="<?=$outlogin_skin_path?>/img/message_01.gif" width="193" height="33" border="0" usemap="#Map" /></td>
  </tr>
  <tr>
    <td height="114" align="center" background="<?=$outlogin_skin_path?>/img/message_02.gif"><table width="150" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="center" class="message01"><br>
          <strong><?=$member[mb_name]?></strong>님<br>
          <br>
          쪽지가 도착했습니다<br>
          확인하시겠습니까?<br></td>
      </tr>
      <tr>
        <td align="center"><a href="#" onclick="window.open('<?=$g4[bbs_path]?>/memo.php','member_memo','width=610,height=460,status=no,toolbar=no,resizable=yes,scrollbars=yes');hideLayer('kissme');"><img src="<?=$outlogin_skin_path?>/img/message_btn_01.gif" width="59" height="21" border="0"></a><a href="#" onclick='hideLayer("kissme")'><img src="<?=$outlogin_skin_path?>/img/message_btn_closs.gif" width="59" height="21" border="0"></a></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><img src="<?=$g4[path]?>/img/message_03.gif" width="193" height="15" /></td>
  </tr>
</table>
<map name="Map"><area shape="rect" coords="168,10,183,24" href="#" onclick='hideLayer("kissme")'></map>
</div>
<!-- 쪽지 알람 -->
<span id="memo_alarm"></span>
<!--
<span id="realtime_memo_new"></span>
-->
  • 복사

댓글 전체

페이지가 리플레쉬 되었을 때 자바스크립트 값을 유지하는 방법은 없습니다.
다만 위에서 memo_old 값을 0 으로 초기화 하지 말고
realtime_memo_connect.php 에 있는 루틴을 페이지 상단에 삽입하여
memo_old 값을 초기화 하는 방법이 있을 수 있겠습니다.
제가 코드를 아무리 봐도 그런거 같더라구요.
그렇다면 코드를 처음부터 다 수정해야 하겠네요 ^^
ajax는 깔끔하게 잘 돌아가는데... ㅎㅎ...
© SIRSOFT
현재 페이지 제일 처음으로