자바메뉴 에러 도와주세요 > 그누3질답

그누3질답

자바메뉴 에러 도와주세요 정보

그누보드 자바메뉴 에러 도와주세요

본문

안녕하세요. 저는 아마추어로서 비영리싸이트인 korearth.net을 운영하고 있습니다.  처음에는 적수게시판을 썼었는데, 그누보드로 교체한지는 꽤 됬습니다.

싸이트를 운영하다 보니 새소식 메일링 서비스에 몇가지 문제점이 있어, 그누보드에 포함된 회원제를 새로 적용하려 합니다. 그래서 홈페이지를 전체적으로 개편하는데, 처음부터 막히네요.  문제는 다름이 아니라, 자바메뉴(서브메뉴를 보여주는 메뉴)를 삽입하였는데, 다 잘 되다가 게시판 글 읽기를 하면 메뉴가 더 이상 작동이 되질 않는다는 것입니다 (서브메뉴가 나타나질 않습니다).  벌써 한 달째 이렇게도 저렇게도 해보고 소스도 살펴보고 있지만 해결될 기미가 보이지 않습니다.  아마추어인 저에게는 무리인가 봅니다.

그누회원님들께서 살펴보시고 무엇이 문제인지 어떻게 해결해야 하는지 도움주시면 대단히 감사하겠습니다.

지금 작업중인 곳의 URL은

http://beta.korearth.net 이고,

메뉴 작업 내용은 아래와 같습니다.

1) 'javascript.js' 맨 끝에 아래 내용을 추가하였습니다

//-----------------------------------------------------------------------
// 2005년 2월 3일 더한 메뉴관련 함수들 (CascadeMenu)
//-----------------------------------------------------------------------

  function InitMenu()
  {
    var bar = menuBar.children   

    for(var i=0;i < bar.length;i++)
        {
          var menu=eval(bar[i].menu)
          menu.style.visibility = "hidden"
          bar[i].onmouseover = new Function("ShowMenu("+bar[i].id+")")
          var Items = menu.children
          for(var j=0; j<Items.length; j++)
            {
              var menuItem = eval(Items[j].id)
               
                if(menuItem.menu != null)
                  {
                    menuItem.innerHTML += "<Span Id="+menuItem.id+"_Arrow class='Arrow'>4</Span>"
                    //var tmp = eval(menuItem.id+"_Arrow")
                    // tmp.style.pixelLeft = menu.getBoundingClientRect().Right //- tmp.offsetWidth - 15
                    FindSubMenu(menuItem.menu)}
             
                if(menuItem.cmd != null)
                  {
                  menuItem.onclick = new Function("Do("+menuItem.id+")") }
                 
              menuItem.onmouseover = new Function("highlight("+Items[j].id+")")
           
            }   
       
        } 
  }
  function FindSubMenu(subMenu)
  {
        var menu=eval(subMenu)
        var Items = menu.children
          for(var j=0; j<Items.length; j++)
            {
              menu.style.visibility = "hidden"
              var menuItem = eval(Items[j].id)
             
             
              if(menuItem.menu!= null)
                {
                    menuItem.innerHTML += "<Span Id="+menuItem.id+"_Arrow class='Arrow'>4</Span>"
                    // var tmp = eval(menuItem.id+"_Arrow")
                    //tmp.style.pixelLeft = 35 //menuItem.getBoundingClientRect().right - tmp.offsetWidth - 15
                    FindSubMenu(menuItem.menu)
                }

                if(menuItem.cmd != null)
                  {
                  menuItem.onclick = new Function("Do("+menuItem.id+")") }
                 
              menuItem.onmouseover = new Function("highlight("+Items[j].id+")")
               
            } 
  }
  function ShowMenu(obj)
  {
    HideMenu(menuBar)
    var menu = eval(obj.menu)
    var bar = eval(obj.id)
    bar.className="barOver"
    menu.style.visibility = "visible"
    menu.style.pixelTop =  obj.getBoundingClientRect().top + obj.offsetHeight + Bdy.scrollTop
    menu.style.pixelLeft = obj.getBoundingClientRect().left + Bdy.scrollLeft
  }
 
  function highlight(obj)
  {
    var PElement = eval(obj.parentElement.id)
    if(PElement.hasChildNodes() == true)
    {  var Elements = PElement.children
      for(var i=0;i<Elements.length;i++)
      {
          TE = eval(Elements[i].id)
          TE.className = "menuItem"
      }
      }
    obj.className="ItemMouseOver"
    window.defaultStatus = obj.title
    ShowSubMenu(obj)
  }
 
  function Do(obj)
  {
    var cmd = eval(obj).cmd
    window.navigate(cmd)
   
  }
 
  function HideMenu(obj)
  {
          if(obj.hasChildNodes()==true)
              { 
                var child = obj.children   
               
                for(var j =0;j<child.length;j++)
                  {
                    if (child[j].className=="barOver")
                    {var bar = eval(child[j].id)
                      bar.className="Bar"}
                     
                    if(child[j].menu != null)
                      {
                          var childMenu = eval(child[j].menu)
                          if(childMenu.hasChildNodes()==true)
                              HideMenu(childMenu)
                         
                          childMenu.style.visibility = "hidden"
                        }
                  }
             
              }
  }
  function ShowSubMenu(obj)
  {
    PMenu = eval(obj.parentElement.id)
      HideMenu(PMenu)
    if(obj.menu != null)
    {
    var menu = eval(obj.menu)
    menu.style.visibility = "visible"
    menu.style.pixelTop =  obj.getBoundingClientRect().top + Bdy.scrollTop
    menu.style.pixelLeft = obj.getBoundingClientRect().right + Bdy.scrollLeft
    if(menu.getBoundingClientRect().right > window.screen.availWidth )
      menu.style.pixelLeft = obj.getBoundingClientRect().left - menu.offsetWidth
    }
  }

//-----------------------------------------------------------------------------
//여기까지 메뉴 관련 함수
//-----------------------------------------------------------------------------

2) 'style.css' 끝에 아래 스타일을 추가했습니다

/* 2003년 2월 3일에 추가된 메뉴 관련 스타일 */

.menuBar
{
    POSITION: relative;
    BACKGROUND-COLOR: transparent;
    TEXT-ALIGN: center
}
.Bar
{
    BORDER-RIGHT: #91C4D7 1px outset;
    BORDER-TOP: #91C4D7 1px outset;
    FLOAT: left;
    BORDER-LEFT: #91C4D7 1px outset;
    WIDTH: 100px;
    CURSOR: hand;
    TEXT-INDENT: 5px;
    BORDER-BOTTOM: #91C4D7 1px outset;
    POSITION: relative;
    BACKGROUND-COLOR: deepsky#91C4D7;
    TEXT-ALIGN: center
}
.menu
{
    BORDER-RIGHT: buttonhighlight thin outset;
    BORDER-TOP: buttonhighlight thin outset;
    VISIBILITY: hidden;
    BORDER-LEFT: buttonhighlight thin outset;
    WIDTH: 150px;
    LINE-HEIGHT: 140%;
    BORDER-BOTTOM: buttonhighlight thin outset;
    POSITION: absolute;
    BACKGROUND-COLOR: deepsky#91C4D7
}
.menuItem
{
    PADDING-RIGHT: 15px;
    PADDING-LEFT: 10px;
    WIDTH: 100%;
    CURSOR: hand;
    LINE-HEIGHT: 20px;
    BORDER-BOTTOM: white 1px solid
}

.ItemMouseOver
{
    PADDING-RIGHT: 15px;
    PADDING-LEFT: 10px;
    WIDTH: 100%;
    CURSOR: hand;
    COLOR: highlighttext;
    LINE-HEIGHT: 20px;
    BORDER-BOTTOM: white 1px solid;
    BACKGROUND-COLOR: highlight
}
.ItemMouseOut
{
    WIDTH: 100%
}
.Arrow
{
    FLOAT: right;
    FONT-FAMILY: Webdings;
    POSITION: absolute;
    TEXT-ALIGN: left
}
.barOver
{
    BORDER-RIGHT: #91C4D7 1px ridge;
    BORDER-TOP: #91C4D7 1px ridge;
    FLOAT: left;
    BORDER-LEFT: #91C4D7 1px ridge;
    WIDTH: 100px;
    CURSOR: hand;
    TEXT-INDENT: 5px;
    BORDER-BOTTOM: #91C4D7 1px ridge;
    POSITION: relative;
    BACKGROUND-COLOR: deepsky#91C4D7;
    TEXT-ALIGN: center
}

/* 여기까지 메뉴 관련 스타일 */

3) 'head.sub.php' 의 36번째 줄의 body tag 내의 내용을 다음과 같이 바꾸었습니다

<body leftmargin='<?=$cfg[leftmargin]?>' topmargin='<?=$cfg[topmargin]?>' <?=$script?> OnLoad="InitMenu()" Onclick="HideMenu(menuBar)" ID="Bdy">

4) head.phpd의 원래 메뉴 부분을 아래와 같이 대체하였습니다 (원래 파일의 45째 줄부터)

<!-- CasecadeMenu 시작 -->

<DIV Id="menuBar" class="menuBar" >
    <DIV Id="Bar1" class="Bar"  menu="menu1">Menu #1</DIV>
    <DIV Id="Bar2" class="Bar"  menu="menu2">Menu #2</DIV>
    <DIV Id="Bar3" class="Bar"  menu="menu3">Menu #3</DIV>
    <DIV Id="Bar4" class="Bar"  menu="menu4">Menu #4</DIV>
</DIV>
<!--MenuItem Definition -->
<div Id="menu1" class="menu" >
  <div Id="menuItem1_1" class="menuItem"  menu="menu6">SubMenu #1</div>
  <div Id="menuItem1_2" class="menuItem" title="JavaScripts" cmd="http://javascript.internet.com/">JavaScript Source</div>
  <div Id="menuItem1_3" class="menuItem" title="WDVL" cmd="http://www.wdvl.com">WDVL</div>
</div>
<div Id="menu2" class="menu">
  <div Id="menuItem2_1" class="menuItem">Page #1</div>
  <div Id="menuItem2_2" class="menuItem">Page #2</div>
  <div Id="menuItem2_3" class="menuItem">Page #3</div>
</div>
<div Id="menu3" class="menu">
  <div Id="menuItem3_1" class="menuItem">Page #1</div>
  <div Id="menuItem3_2" class="menuItem">Page #2</div>
  <div Id="menuItem3_3" class="menuItem">Page #3</div>
  <div Id="menuItem3_4" class="menuItem" menu="menu5">SubMenu #4</div>
</div>
<div Id="menu4" class="menu">
  <div Id="menuItem4_1" class="menuItem">Page #1</div>
  <div Id="menuItem4_2" class="menuItem">Page #2</div>
  <div Id="menuItem4_3" class="menuItem">Page #3</div>
  <div Id="menuItem4_4" class="menuItem">Page #4</div>
</div>
<div id="menu5" class="menu">
    <div Id="menuItem5_1" class="menuItem">Page #4-1</div>
    <div Id="menuItem5_2" class="menuItem">Page #4-2</div>
    <div Id="menuItem5_3" class="menuItem">Page #4-3</div>
</div>
<div id="menu6" class="menu">
    <div Id="menuItem6_1" class="menuItem">Page #1-1</div>
    <div Id="menuItem6_2" class="menuItem">Page #1-2</div>
    <div Id="menuItem6_3" class="menuItem" menu="menu7">SubMenu #1-1</div>
</div>
<div id="menu7" class="menu">
    <div Id="menuItem7_1" class="menuItem">Page #1-1-1</div>
    <div Id="menuItem7_2" class="menuItem">Page #1-1-2</div>
    <div Id="menuItem7_3" class="menuItem">Page #1-1-3</div>
</div>
<!-- CasecadeMenu 끝 -->

너무 긴 글 끝까지 읽어주셔서 감사합니다.  님들의 도움을 간절히 바라며 이만 줄입니다.

아 그리고 혹시 지질학에 관심 있으신 분은

http://www.kroearth.net 도 둘러보시고,

모두 행복한 설 쇠세요.

댓글 전체

답변 감사합니다.  body 태그 내의 'OnLoad'와 gbview.skin.php의 두번째 자바스크립트 내 'window.onload'가 서로 충돌하는 것 같습니다.  이 두번째 자바스크립트만 코멘트 처리하니까 되네요. 덕분에 한 시름 놓았습니다. 다시 한 번 감사.

하지만 이 자바스크립트도 필요할텐데, 이 충돌을 어떻게 해결하는 방법은 없을까요?
gbview.skin.php 스킨파일에서 이부분과

<script language="JavaScript">
<!--
    function image_window2(src)
    {
        var img = src.src;
        var tmp_w = w = src.tmp_width;
        var tmp_h = h = src.tmp_height;

        winl = (screen.width-w)/2;
        wint = (screen.height-h)/3;

        if (w >= screen.width) {
            winl = 0;
            w = screen.width - 10;
            h = (parseInt)(w * (h / w));
        }

        if (h >= screen.height) {
            wint = 0;
            h = screen.height - 80;
            w = (parseInt)(h * (w / h));
        }

        var settings  ='width='+w+',';
            settings +='height='+h+',';
            settings +='top='+wint+',';
            settings +='left='+winl+',';
            settings +='scrollbars=no,';
            settings +='resizable=no,';
            settings +='status=no';

        win=window.open("","newWindow",settings);
        win.document.open();
        win.document.write ("<html><head><meta http-equiv='content-type' content='text/html; charset=euc-kr'>");
        win.document.write ("<title>이미지 보기</title></head>");
        win.document.write ("<body leftmargin=0 topmargin=0>");
        win.document.write ("<img src='"+img+"' width='"+w+"' height='"+h+"'border=0 onclick='window.close();' style='cursor:hand'>");
        win.document.write ("</body></html>");
        win.document.close();

        if(parseInt(navigator.appVersion) >= 4){win.window.focus();}
    }
//-->
</script>

////////////////////////////

멘아래

<script language="JavaScript">
<!--
    // HTML 로 넘어온 <img ... > 태그의 폭이 테이블폭보다 크다면 테이블폭을 적용한다.
    // 제로보드 참고
    function resize_image()
    {
        var target = document.getElementsByName('target_resize_image[]');
        for(i=0; i<target.length; i++) {
            // 원래 사이즈를 저장해 놓는다
            target[i].tmp_width  = target[i].width;
            target[i].tmp_height = target[i].height;
            // 이미지 폭이 테이블 폭보다 크다면 테이블폭에 맞춘다
            if(target[i].width > document.main_table.width)
                target[i].width = document.main_table.width;
        }
    }
    window.onload = resize_image;
//-->
</script>

지우고 사용 하시면 잘될거예요

제가 이부분지우고 하니 잘되더라고요^^
전체 9,564
그누3질답 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT