Zum Inhalt springen

GMENU Rollover: Strict / Transitional im IE

Erstellt am 30. Juni 2006 · 4 Antworten · letzte Antwort am 8. Dezember 2006

Tags: HTML & CSS, Frage

thmsgr ·

Hallo zusammen,

meine Seite ist in XHTML 1.0 Strict aufgebaut.
Ich verwende ein einfaches GMENU:

navigation.primary = HMENU
navigation.primary {
	special = directory
	special.value = {$folder_primary}
	entryLevel = 1
	1 = GMENU
	1.NO {
		XY = [20.w]+28,25
		transparentBackground = 1
		20 = TEXT
		20 {
			text.field = title
			offset = 13,19
			fontColor = #777777
			fontSize = 20
			fontFile = {$font_b}
		}
	}
	1.RO < .1.NO
	1.RO = 1
	1.RO {
		20.fontColor = {$farbe_gruen}
	}
	1.ACT < .1.NO
	1.ACT = 1
	1.ACT {
		20.fontColor = {$farbe_rot}
		20.fontSize = 24
		20.offset = 16,19
	}
}

Im Internet Explorer wird alles korrekt angezeigt, nur die Rollovers funktionieren dort nicht. In FF & Opera geht alles einwandfrei. Wenn ich den Doctype von "Strict" auf "Transitional" umschalte, funktionieren die Rollovers auch im IE.

Ich vermute das Problem beim over/out JavaScript von Typo3, kann aber nichts finden. Hat sich schonmal jemand damit befasst / ein Ähnliches Problem gehabt?
Wie löst man das?

grüße
thmsgr

LineMan ·

wieso dann unbedingt strict verwenden, wenns mit transitional doch geht? dort darfst du dann z.B. auch keine target-attribute in links verwenden. transitional ist doch vollkommen ausreichend... und ausserdem warum postest du das hier im barrierefrei forum... ein gmenu ist nunmal nicht wirklich barrierefrei. dann müsstest du schon ein listenmenü benutzen (tmenu)

bei dem eigentlichen problem kann ich dir leider nicht helfen, da ich gmenüs nie verwende.

thmsgr ·
LineMan schrieb

wieso dann unbedingt strict verwenden, wenns mit transitional doch geht?

Die Vorgabe ist: Erstelle die Seite in Strict. Ende.

LineMan schrieb

und ausserdem warum postest du das hier im barrierefrei forum... ein gmenu ist nunmal nicht wirklich barrierefrei.

...

Tja, ich bin wohl im falschen Forum. Tut mir leid.

LineMan schrieb

bei dem eigentlichen problem kann ich dir leider nicht helfen

Das hab ich schon gemerkt.

Trotzdem vielen Dank...

grüße
thmsgr

thmsgr ·

Hallo nochmal,

(vielleicht kann man den Beitrag ja in ein passendes Forum verschieben?)

zu meinem Problem:
Ich habe nun herausgefunden, dass das JavaScript von Typo3 im IE beim Doctype "Strict" einen anderen Wert als erwartet bekommt und deshalb nicht funktioniert.

Konkret sieht das so aus:

function over(name,imgObj)	{	//
  if (version == "n3" && document[name]) {
    document[name].src = eval(name+"_h.src");
  }
  else if (typeof(document.getElementById)=="function" && document.getElementById(name)) {
    document.getElementById(name).src = eval(name+"_h.src");
  }
...
}

Das Problem ist nun, dass die Abfrage nach typeof(document.getElementById)=="function" beim IE den Wert "object" zurückliefert. Somit wird der Rollover nicht ausgeführt.

Abhilfe könnte z. B. dadurch geschafft werden, indem man nur schreibt:

else if (document.getElementById && document.getElementById(name)) {

Die Frage ist nur, wo / wie kann man das JavaScript entsprechend abändern?

Hat jemand eine Idee?

grüße
thmsgr

Flipmoe5 ·

Hallo,
etwas spät, aber eventuell hilft es dem einen oder anderen noch weiter.

Es handelt sich um folgende Datei:
/typo3/sysext/cms/tslib/class.tslib_fe.php

Zeile 3736 bis 3747:

'		// JS function for mouse-over
	function over(name,imgObj)	{	//
		if (version == "n3" && document[name]) {document[name].src = eval(name+"_h.src");}
		else if (typeof(document.getElementById)=="function" && document.getElementById(name)) {document.getElementById(name).src = eval(name+"_h.src");}
		else if (imgObj)	{imgObj.src = eval(name+"_h.src");}
	}
		// JS function for mouse-out
	function out(name,imgObj)	{	//
		if (version == "n3" && document[name]) {document[name].src = eval(name+"_n.src");}
		else if (typeof(document.getElementById)=="function" && document.getElementById(name)) {document.getElementById(name).src = eval(name+"_n.src");}
		else if (imgObj)	{imgObj.src = eval(name+"_n.src");}
	}';