Avatar billede mitbrugernavn Praktikant
11. januar 2007 - 15:50 Der er 6 kommentarer og
1 løsning

menu og ie 7

Har opgraderet til ie 7 og har nu problemer med følgende menu

<style type="text/css">
#divCont {position:absolute; z-index:1; left:50px; top:70px; height:400px; width:170px; visibility:hidden;}
.clTop  {position:absolute; z-index:1; width:170px; line-height:20px;}
.clSub  {position:absolute; z-index:1; left:7px; top:20px; width:170px; line-height:17px;}

/*** This sets the style for the links inside the menu. ***/
#divCont .clTop a {color:#009900; font-family:Verdana; font-size:10px; font-weight:bold; text-decoration:none;; letter-spacing: 2px;}
#divCont .clTop a:hover {color:#ffffff; text-decoration:none;}
#divCont .clSub a {color:#ffffff; font-family:Verdana; font-size:10px; font-weight:bold; text-decoration:none;; letter-spacing: 1px}
#divCont .clSub a:hover {color:#009900; text-decoration:none;} 

</style>
<script language="JavaScript" type="text/javascript">

function lib_bwcheck(){ //Browsercheck (needed)
    this.ver=navigator.appVersion
    this.agent=navigator.userAgent
    this.dom=document.getElementById?1:0
    this.opera5=this.agent.indexOf("Opera 5")>-1
    this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
    this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
    this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
    this.ie=this.ie4||this.ie5||this.ie6
    this.mac=this.agent.indexOf("Mac")>-1
    this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
    this.ns4=(document.layers && !this.dom)?1:0;
    this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
    return this
}
var bw=new lib_bwcheck()

/*** variables you can configure ***/

FoldNumber = 1        //How many toplinks do you have?
var stayFolded = false            //Stay open when you click a new toplink?
foldImg = 0                        //Do you want images (if not set to 0 and remove the images from the body)?
mainOffsetY = 4                //Vertical space adjustment between the main items, in pixels.

//This is the default image.
//Remember to change the actual images in the page as well, but remember to keep the name of the image.
var unImg=new Image();
unImg.src='foldoutmenu_arrow.gif'

var exImg=new Image();                    //Making an image variable...
exImg.src='foldoutmenu_arrow_open.gif'    //...this is the source of the image that it changes to when the menu expands.

// NOTE: if you change the position of divCont from absolute to relative, you can put the foldoutmenu in a table.
// HOWEVER it will no longer work in netscape 4. If you wish to support netscape 4, you have to use absolute positioning.

/*** There should be no need to change anything beyond this. ***/

// A unit of measure that will be added when setting the position of a layer.
var px = bw.ns4||window.opera?"":"px";

if(navigator.userAgent.indexOf('Opera')>-1 && document.getElementById){ //Opera 5 resize fix.
    scrX= innerWidth; scrY= innerHeight;
    document.onmousemove= function(){
        if(scrX<innerWidth-10 || scrY<innerHeight-10 || scrX>innerWidth+10 || scrY>innerHeight+10){
            scrX = innerWidth;
            scrY = innerHeight;
            initFoldout();
        }
    };
}

//object constructor...
function makeMenu(obj,nest){
    nest= (!nest)?"":'document.'+nest+'.';
    this.el= bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):document.getElementById(obj);   
      this.css= bw.ns4?this.el:this.el.style;
    this.ref= bw.ns4?this.el.document:document;       
    this.x= (bw.ns4||bw.opera5)?this.css.left:this.el.offsetLeft;
    this.y= (bw.ns4||bw.opera5)?this.css.top:this.el.offsetTop;
    this.h= (bw.ie||bw.ns6)?this.el.offsetHeight:bw.ns4?this.ref.height:bw.opera5?this.css.pixelHeight:0;
    this.vis= b_vis;
    this.hideIt= b_hideIt;
    this.showIt= b_showIt;
    this.moveIt= b_moveIt;
    return this
}
//object methods...
function b_showIt(){this.css.visibility='visible'}
function b_hideIt(){this.css.visibility='hidden'}
function b_vis(){if(this.css.visibility=='hidden' || this.css.visibility=='HIDDEN' || this.css.visibility=='hide') return true;}
function b_moveIt(x,y){this.x=x; this.y=y; this.css.left=this.x+px; this.css.top=this.y+px}

/************************************************************************************
This is the function that changes the sub menus to folded or unfolded state.
************************************************************************************/
function menu(num){
    if(bw.bw){
        if (!stayFolded){
            for (var i=0; i<oSub.length; i++){
                if (i!=num){
                    oSub[i].hideIt()
                    if (foldImg)oTop[i].ref["imgA"+i].src = unImg.src
                }
            }
            for(var i=1; i<oTop.length; i++){
                oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h)
            }
        }
        if (oSub[num].vis()){
            oSub[num].showIt()
            if (foldImg)oTop[num].ref["imgA"+num].src = exImg.src
        }else{
            oSub[num].hideIt()
            if(foldImg)oTop[num].ref["imgA"+num].src = unImg.src
        }
        for(var i=1; i<oTop.length; i++){
            if (!oSub[i-1].vis()) oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h+oSub[i-1].h+mainOffsetY)
            else oTop[i].moveIt(0,oTop[i-1].y+oTop[i-1].h+mainOffsetY)
        }
    }
}

/*********************************************************************
The init function... there should be no need to change anything here.
*********************************************************************/
function initFoldout(){
    //Fixing the browsercheck for opera... this can be removed if the browsercheck has been updated!!
    bw.opera5 = (navigator.userAgent.indexOf("Opera")>-1 && document.getElementById)?true:false
    if (bw.opera5) bw.ns6 = 0

    oTop = new Array()
    oSub = new Array()
    //Making the objects and hiding the subs...
    for (var i=0; i<FoldNumber; i++){
        oTop[i] = new makeMenu('divTop'+i,'divCont')
        oSub[i] = new makeMenu('divSub'+i,'divCont.document.divTop'+i)
        oSub[i].hideIt()
    }
   
    //Positioning the top objects...
    oTop[0].moveIt(0,0)
    for (var i=1; i<oTop.length; i++){
        oTop[i].moveIt(0, oTop[i-1].y+oTop[i-1].h+mainOffsetY)
    }
   
    //Making the containing menu object and showing it...
    oCont = new makeMenu('divCont')
    oCont.showIt()
}

// If the browser is ok, the script is started onload...
if(bw.bw) onload = initFoldout;
</script>

<div id="Layer1" style="position:absolute; width:125px; height:281px; z-index:1; left: 0; top: 30; visibility: visible;">
  <div id="divCont" style="top: 7; left: 0; width: 170px; height: 340px; visibility: hidden">
    <!-- These are the contents of the foldoutmenu. -->

<div id="divTop0" class="clTop"><a href="#" onclick="menu(0); return false" onfocus="this.blur()">
      test</a>
      <div id="divSub0" class="clSub">
      <a href="#" target="test">test 1 </a><br>     
<a href="#" target="test">test 2 </a><br> 
<a href="#" target="test">test 3 </a><br> 
      </div>
    </div><br>

  <div id="divTop1" class="clTop"><a href="#" onclick="menu(1); return false" onfocus="this.blur()">
      test test</a>
      <div id="divSub1" class="clSub">
<a href="#" target="test">test 11 </a><br>     
<a href="#" target="test">test 22 </a><br> 
<a href="#" target="test">test 33 </a><br> 
      </div>
    </div><br>

  </div>
    </div>


Nogen der kan hjælpe med det der skal til for at få det til at virke
??????
Avatar billede gramil Novice
11. januar 2007 - 16:10 #1
Der er jo som bekendt af og til problemer med visning af websider i IE7. Dette kan omgås ved at downloade et program fra Microsoft, der kan emulere IE6 på visse sider. Microsoft skriver:

"If you encounter a site which does not recognize Internet Explorer 7, a new tool known as the User Agent String Utility has been created to help you work around the problem. The utility comes in the form of a small executable that opens an Internet Explorer 7 instance that emulates Internet Explorer 6 by sending the Internet Explorer 6 user agent string. It also provides a mechanism for you to report problem web sites to Microsoft so that we can follow up with the affected site owners."

Linket til siden er her. Du kan også downloade programmet der.

http://www.microsoft.com/windows/ie/support/default.mspx

Programmet findes her: http://go.microsoft.com/fwlink/?LinkID=70356
Avatar billede mitbrugernavn Praktikant
11. januar 2007 - 16:22 #2
Hmmm - har hentet det men ikke installeret det endnu.

Men det løser jo ikke mit problem angående brugerne af siden, jeg kan jo ikke bede dem om at hente ovennævnte hvis de ikke kan se menuen ;-))) ????
Avatar billede gramil Novice
11. januar 2007 - 16:27 #3
Nej, det kan jeg godt se.. Men så skal du nok som Microsoft skriver installere programmet og så sende fejlen til dem.. Det kunne faktisk være sjovt at se om de vil gå ind i processen med at rette til. Det er jo det de skriver.
Avatar billede crazysnap Seniormester
11. januar 2007 - 19:53 #4
Det med at emulere tidligere versioner af programmer er aldrig en holbar løsning, dels fordi man altid skal bevæge sig fremad og dels fordi man ikke kan kræve af brugerne at de skal emulere gammelt software oven på deres "nye" software (som du også selv nævner).

Grunden til dit script ovenover ikke virker er at din lib_bwcheck()ikke håndterer IE7. Når den spørger på alle ie4, ie5, ie6 variablerne bliver alle sammen rigtigt nok "false" (da det er ie7 der køres). Det betyder at den ikke tror det er en internet explorer browser scriptet kører på. Jeg har så ændret lidt i metoden så scriptet også kan køres på IE7. Hvis du udskifter nedenstående metode:


function lib_bwcheck(){ //Browsercheck (needed)
    this.ver=navigator.appVersion
    this.agent=navigator.userAgent
    this.dom=document.getElementById?1:0
    this.opera5=this.agent.indexOf("Opera 5")>-1
    this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
    this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
    this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
    this.ie=this.ie4||this.ie5||this.ie6
    this.mac=this.agent.indexOf("Mac")>-1
    this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
    this.ns4=(document.layers && !this.dom)?1:0;
    this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
    return this
}


med:


function lib_bwcheck()
    { //Browsercheck (needed)
        this.ver=navigator.appVersion
        this.agent=navigator.userAgent
        this.dom=document.getElementById?1:0
        this.opera5=this.agent.indexOf("Opera 5")>-1
        this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0;
        this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
        this.ie7=(window.XMLHttpRequest && document.all && !window.opera) ? 1 : 0;
        this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
        this.ie=this.ie4||this.ie5||this.ie6||this.ie7;
        this.mac=this.agent.indexOf("Mac")>-1
        this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;
        this.ns4=(document.layers && !this.dom)?1:0;
        this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ie7 || this.ns4 || this.ns6 || this.opera5)
        return this
    }


Burde scriptet køre som det plejer. Håber løsningen virker, ellers må du lige skrive tilbage om evt andre fejl :)


- Snap
Avatar billede mitbrugernavn Praktikant
11. januar 2007 - 22:12 #5
Takker mange gange - det virker bare super. Jeg have siddet og leget lidt med browsercheck men kunne ikke få det til at virke. Det er lidt surt når man har brugt det flere steder, så er det godt man har livlinerne herinde.

God aften
Avatar billede mitbrugernavn Praktikant
11. januar 2007 - 22:13 #6
gramli -> Forøvrigt også tak for det lille link faktisk lidt rart at have til at tjekke med.
Avatar billede crazysnap Seniormester
11. januar 2007 - 23:18 #7
Det var godt at høre! :) Og ja irriterende når man har lavet noget der pludselig ikke virker når der opdateres til nye versioner.

Og gramil, nyttigt link (vidste ikke der fandtes en IE6-emulator der sendte en IE6 user agent streng fra sin  IE7 browser).

Men tak for pointene og glad for jeg kunne hjælpe!


- Snap :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester