Probleme mit Referenzierung bei Frames
BenCC
- dhtml
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
Merhaba!
Bei dem von Dir verwendeten DHTML-Menu (von
Thomas Brattli, wenn ich mich nicht irre 8})
musst Du in die jeweils darzustellenden
Unterseiten ein kleines JavaScript einfügen,
damit das Menu Frame-übergreifend funktioniert.
Sieh doch unter http://www.dhtmlcentral.com/ nach,
dort findest Du sowohl das komplette Package als auch
eine Anleitung.
LG - Ollie
Merhaba!
Sieh doch unter http://www.dhtmlcentral.com/ nach,
dort findest Du sowohl das komplette Package als auch
eine Anleitung.
Hmm, der Server scheint z. Zt. offline zu sein, schau
halt später nochmal nach.
LG - Ollie