BenCC: Probleme mit Referenzierung bei Frames

Beitrag lesen

Hallo,

ich habe ein Pop-Up-Menu heruntergeladen, das framesübergreifend arbeitet und wollte es auf meine Gegebeneheiten anpassen. Leider habe ich noch an einer Stelle Probleme. Wenn ich einen Menüeintrag auswähle, wird mir die Seite im entsprechneden Frame angezeigt, aber das Menu lässt sich von da an nicht benutzen. Erst wenn ein Neuladen erfolgt, funktioniert das Ganze wieder (auch wieder nur 1x). Habe Euch das Script mal zur Verfügung gestellt. Vielleicht weiss jemand von Euch, wo ich was ändern muss. Danke im Voraus.

Das Script für das Menu lautet:

<script> /Browsercheck object - we have to move this into the page to prevent an error in NS4/ function cm_bwcheck(){         //In theory we should use object detection, but this script needs work-arounds for almost every browser...         this.ver=navigator.appVersion         this.agent=navigator.userAgent.toLowerCase()         this.dom=document.getElementById?1:0         this.ns4=(!this.dom && document.layers)?1:0;         this.op=window.opera         this.moz=(this.agent.indexOf("gecko")>-1 || window.sidebar)         this.ie=this.agent.indexOf("msie")>-1 && !this.op         if(this.op){                 this.op5=(this.agent.indexOf("opera 5")>-1 || this.agent.indexOf("opera/5")>-1)                 this.op6=(this.agent.indexOf("opera 6")>-1 || this.agent.indexOf("opera/6")>-1)                 this.op7=this.dom&&!this.op5&&!this.op6 //So all higher opera versions will use it         }else if(this.moz) this.ns6 = 1         else if(this.ie){                 this.ie4 = !this.dom && document.all           this.ie5 = (this.agent.indexOf("msie 5")>-1)           this.ie55 = (this.ie5 && this.agent.indexOf("msie 5.5")>-1)           this.ie6 = this.dom && !this.ie4 && !this.ie5 && ! this.ie55         }         this.mac=(this.agent.indexOf("mac")>-1)         this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.op5 || this.op6 || this.op7)   this.usedom= this.ns6||this.op7//Use dom creation   this.reuse = this.ie||this.op7||this.usedom //Reuse layers   this.px=this.dom&&!this.op5?"px":""         return this } var bw=new cm_bwcheck() /*** This is the menu creation code - place it right after you body tag Feel free to add this to a stand-alone js file and link it to your page. **/

//Menu object creation oCMenu=new makeCM("oCMenu") //Making the menu object. Argument: menuname

//Netscape 4 - bug fix - //maybe -stupid NS4 - objects are not handled correctly when //the object creator is in a linked file if(bw.ns4) if(!oCMenu["makeMenu"] || !bw["ns4"]) self.location.reload()

//Frame properties oCMenu.frames = 1

//Menu properties oCMenu.pxBetween=0 oCMenu.fromLeft=20 oCMenu.fromTop=5 oCMenu.rows=1 oCMenu.menuPlacement="left"

oCMenu.offlineRoot="file:///d|/thomas2/CM_UPDATE/coolmenus/frames_version/" oCMenu.onlineRoot="/coolmenus/frames_version/" oCMenu.resizeCheck=1 oCMenu.wait=1000 oCMenu.fillImg="cm_fill.gif" oCMenu.zIndex=0

//Background bar properties oCMenu.useBar=1 oCMenu.barWidth="30%" oCMenu.barHeight="menu" oCMenu.barClass="clBar" oCMenu.barX=0 oCMenu.barY=0 oCMenu.barBorderX=0 oCMenu.barBorderY=0 oCMenu.barBorderClass=""

//Level properties - ALL properties have to be spesified in level 0 oCMenu.level[0]=new cm_makeLevel() //Add this for each new level oCMenu.level[0].width=70 oCMenu.level[0].height=20 oCMenu.level[0].regClass="clLevel0" oCMenu.level[0].overClass="clLevel0over" oCMenu.level[0].borderX=1 oCMenu.level[0].borderY=1 oCMenu.level[0].borderClass="clLevel0border" oCMenu.level[0].offsetX=0 oCMenu.level[0].offsetY=0 oCMenu.level[0].rows=0 oCMenu.level[0].arrow=0 oCMenu.level[0].arrowWidth=0 oCMenu.level[0].arrowHeight=0 oCMenu.level[0].align="bottom"

//EXAMPLE SUB LEVEL[1] PROPERTIES - You have to specify the properties you want different from LEVEL[0] - If you want all items to look the same just remove this oCMenu.level[1]=new cm_makeLevel() //Add this for each new level (adding one to the number) oCMenu.level[1].width=140 oCMenu.level[1].height=20 oCMenu.level[1].regClass="clLevel1" oCMenu.level[1].overClass="clLevel1over" oCMenu.level[1].borderX=1 oCMenu.level[1].borderY=1 oCMenu.level[1].align="right" oCMenu.level[1].offsetX=-(oCMenu.level[0].width-2)/2+20 oCMenu.level[1].offsetY=0 oCMenu.level[1].borderClass="clLevel1border" //oCMenu.level[0].width-2

//EXAMPLE SUB LEVEL[2] PROPERTIES - You have to spesify the properties you want different from LEVEL[1] OR LEVEL[0] - If you want all items to look the same just remove this oCMenu.level[2]=new cm_makeLevel() //Add this for each new level (adding one to the number) oCMenu.level[2].width=140 oCMenu.level[2].height=20 oCMenu.level[2].offsetX=0 oCMenu.level[2].offsetY=0 oCMenu.level[2].regClass="clLevel2" oCMenu.level[2].overClass="clLevel2over" oCMenu.level[2].borderClass="clLevel2border"

/****************************************** Menu item creation: myCoolMenu.makeMenu(name, parent_name, text, link, target, width, height, regImage, overImage, regClass, overClass , align, rows, nolink, onclick, onmouseover, onmouseout) *************************************/

oCMenu.makeMenu('top1','','     Start')         oCMenu.makeMenu('sub10','top1','Home','start.htm','frmMain')

oCMenu.makeMenu('top2','','  Favoriten')         oCMenu.makeMenu('sub21','top2','Anwendungssoftware','test2.html')                 oCMenu.makeMenu('sub210','sub21','Microsoft Office','profil.htm','frmMain')                 oCMenu.makeMenu('sub211','sub21','StarOffice','test1.html')

oCMenu.makeMenu('sub22','top2','Systemsoftware','test3.html')                 oCMenu.makeMenu('sub220','sub22','Windows 9.x','test2.html')                 oCMenu.makeMenu('sub221','sub22','Windows 2000','test2.html'))

oCMenu.makeMenu('sub23','top2','Datenbanken','test3.html')                 oCMenu.makeMenu('sub230','sub23','MySQL','test2.html')                 oCMenu.makeMenu('sub231','sub23','SQL-Einführung','test2.html')

oCMenu.makeMenu('sub24','top2','Grafik','test3.html')                 oCMenu.makeMenu('sub240','sub24','Flash','test2.html')                 oCMenu.makeMenu('sub241','sub24','XNVIEW','test2.html')                 oCMenu.makeMenu('sub242','sub24','PhotoShop','test2.html')

oCMenu.makeMenu('top3','','     Extras','test3.html')         oCMenu.makeMenu('sub30','top3','Chat','test2.html')         oCMenu.makeMenu('sub31','top3','E-Mail','test1.html')         oCMenu.makeMenu('sub32','top3','Gästebuch','test2.html')

//Leave this line - it constructs the menu

oCMenu.construct()

/*OPTIONAL LINE: Because some browsers (especially our old friend NS4) have problems with this initial frame load you might want to add a line similar to this (replace MyFrameName with the name of you frame):

top.frmMain.location.relaod()

This will ensure that the menu is loaded when the first page is loaded in the main frame.

This also helps the resize problems in Opera and NS4 */ top.frmMain.location.reload() </script>

Außerdem habe ich die Datei collmenus_frame.js

function cm_findFrame(frameName){  obj=top; var frameObj=0;  for(i=0;i<obj.frames.length;i++){   if(obj.frames[i].name==frameName){frameObj=obj.frames[i]; break;}; ln=obj.frames[i].frames.length   for(j=0;j<ln;j++){    if(obj.frames[i].frames[j].name==frameName){frameObj=obj.frames[i].frames[j];  break}; ln2=obj.frames[i].frames[j].frames.length    for(a=0;a<ln2;a++){     if(obj.frames[i].frames[j].frames[a].name==frameName){frameObj=obj.frames[i].frames[j].frames[a]; break}    }   }  }return frameObj } /********************************************************************* Reload function / function cm_reload(sep){   self.location.href=self.location.href+sep+"reload_coolmenus" } / Getting the menuobjects *********************************************************************/ function cm_getItems(menu,orgframe){   var add,ok = 0, frame   if(top.name==self.name){     //We are not in a frameset, so there's no need to do anything at all.     //This could maybe be used to load the menu directly into the page if     //the frame didn't exist. That could be nice :)     // return   }   frame = cm_findFrame(orgframe)   if(!frame){ //The spesified menu frame doesn't exist     self.status="CoolMenu error: Missing menu frame. Frame name: "+orgframe     //return   }   if(frame[menu]){//Checking menu object     if(frame[menu].constructed){//Checking if it's constructed       frame[menu].makeObjects(0,self)       self[menu] = frame[menu] //Making a local copy of the menu object       ok = 1     }   }   if(!ok){     //This means that we could not find the menus - what to do ??     //We try to reload this page in a little while to check again.     search = self.location.search     //First we check that we haven't already tried:     if(search.substr(1).indexOf("reload_coolmenus")==-1){       //We haven't tried, so let's try that.       if(search.slice(0,1)=="?") sep="&"       else sep="?"       //This will override the usuall onload       //shouldn't use onload, but NS4 didn't like it any other way.       //I will have another look later on.       self.onload=new Function('setTimeout("cm_reload(''+sep+'')",1000)')     }  }   self.status=ok }

/*Getting items -- arguments:

menu: The name of the menu object to use frame: The name of the frame

*/ cm_getItems("oCMenu","frmMenu")

Wie gesagt, ich finde nicht die entsprechnede Stelle, die ich ändern muss, um zu erreichen, dass nach Auswahl des ersten Menueintrags sich die anderen Menueinträge jederzeit auswählen lassen.

mfg BenCC