Zum Inhalt springen

Layermenu wirft fehler aus "Objekt erforderlich Zeile: 175"

Erstellt am 30. September 2009 · 4 Antworten · letzte Antwort am 15. Dezember 2009

Tags: JavaScript & AJAX, Frage

pow ·

Hallo,

das Layermenu wirft im IE immer dem gleichen Fehler aus (getestet mit IE8-). Sogar mit dem Beispiel auf typo3wizard.

http://www.typo3wizard.com/de/snippets/menus/text-layer-menue/anzeigebeispiel-text-layer-menue.html

Hat schon jemand einen Fix dafür? Mich selbst stört das nicht, aber es soll ja Personen geben die sich darauf aufhängen.

Grüße

Meldung: Objekt erforderlich
Zeile: 175
Zeichen: 2
Code: 0
URI: http://www.domain.de/typo3/sysext/cms/tslib/media/scripts/jsfunc.layermenu.js

pow ·

Mit der "friss oder stirb"-Technik komme ich da leider nicht sehr weit.
Kann jemand das zumindest argumentieren wieso Fehler ausgeworfen werden? Liegt das an fehlenden Objektüberprüfungen?

andilaken ·

Hallo,

der Fehler wird dann verursacht, wann immer die Seite neu geladen wird und gleichzeitig die Maus mehr oder weniger schnell bewegt wird. Grund für dieses Fehlverhalten sind natürlich die ungeduldigen Mausschupfer :-> und ein kleines Laufzeitproblem.

Abhilfe schafft eine Try & Catch Konstrukt in der gmenu_layer.php bzw äquivalent in der tmenu_layer.php (zu finden bekannterweise in typo3/sysext/cms/tslib/media/scripts/)

Man sucht im Quelltext nach folgender Zeile (etwa um Z.440):

$GLOBALS['TSFE']->JSeventFuncCalls['onmousemove']['GL_getMouse(e)']= 'GL_getMouse(e);'; // Should be called BEFORE any of the 'local' getMouse

und ersetzt diese durch:

$GLOBALS['TSFE']->JSeventFuncCalls['onmousemove']['GL_getMouse(e)']= 'try{GL_getMouse(e);}catch(ex){};';

Der Sinn von dem Ganzen ist, dass wenn dieser unschöne Fehler auftritt, welcher im Übrigen nur nervt, aber keine Funktionsbeeinträchtigung nach sich zieht, abgefangen wird und im catch Block ins Leere läuft. Eine expliziete Fehlerbehandlung ist unnötig. Durch diese Maßnahme bekommt der Browser nichts mit und alles ist primi...

Andi

______________________________________________
Es gibt keine Probleme - nur Herausforderungen

andilaken ·

Der Sinn von dem Ganzen ist, dass wenn dieser unschöne Fehler auftritt, welcher im Übrigen nur nervt, aber keine Funktionsbeeinträchtigung nach sich zieht, abgefangen wird und im catch Block ins Leere läuft. Eine expliziete Fehlerbehandlung ist unnötig.

Stimmt so nicht ganz:

Der Skriptfehler kommt zwar nicht zur Anzeige und wird abgefangen, aber das Menü funktioniert anschließend nicht mehr richtig. Bei Mouseover auf das aufgeklappte Menü verschwindet dieses sofort wieder.

Folgendes funktioniert jetzt aber mit Sicherheit. Habe ich unter IE6/IE7/IE8 und FF3 getestet.

$GLOBALS['TSFE']->JSeventFuncCalls['onmousemove']['GL_getMouse(e)']='try{GL_getMouse(e);}catch(ex){GL_getMouse(e);};';

$GLOBALS['TSFE']->JSeventFuncCalls['onmousemove'[$this->WMid]='try{GL'.$this->WMid.'_getMouse(e);}catch(ex){GL_getMouse(e);};';

In den beiden Catch Blöcken wird die Methode GL_getMouse(e) der jsfunc.layermenu.js nochmals aufgerufen...