Mysteriöse IE-Fehlermeldung
Andreas Dölling
- javascript
Hallo,
ich bekomme bei einem Projekt eine Javascript-Fehlermeldung im Internet Explorer, die selbst für IE-Verhältnisse rätselhaft ist:
"Code eines freigegebenen Skripts kann nicht ausgeführt werden."
Dazu - wie immer - eine unbrauchbare Zeilenangabe.
Bei Reload tritt kein Fehler mehr auf. Mit dem Cache sollte es aber nichts zu tun haben, da alle Skripte erst bei onload ausgeführt werden.
Ich habe zudem die Funktionsaufrufe in try-catch-Blöcke eingeschlossen - allerdings ohne Ergebnis.
<script type="text/javascript">
try {
addLoadEvent(initObjects);
addLoadEvent(addTopLinks);
} catch(err) {
alert(err);
}
</script>
Der Block wirft keinen Fehler, während die oben beschriebene mysteriöse Fehlermeldung weiterhin kommt.
Mozilla und Opera zeigen übrigens gar keinen Fehler an.
Ist Euch diese Fehlermeldung schon einmal untergekommen? Könnt Ihr etwas damit anfangen?
Thanx und ciao,
Andreas
Merkwürdige Fehlermeldungen erhalte ich ab und zu, wenn ich Funktionsnamen benutze, die es im Browser schon gibt. load zB ist so ein Name. Ändere mal deine Funktionsnamen.
Hallo,
Merkwürdige Fehlermeldungen erhalte ich ab und zu, wenn ich Funktionsnamen benutze, die es im Browser schon gibt. load zB ist so ein Name. Ändere mal deine Funktionsnamen.
daran kann es nicht liegen, denn zum einen heißt meine Funktion ja "addLoadEvent" und zum anderen benutze ich diese Funktion schon in zig anderen Projekten ohne Probleme.
Und: bei Reload der Seite klappt es ja.
Ciao,
Andreas
Hallo Andreas.
Mozilla und Opera zeigen übrigens gar keinen Fehler an.
Mozilla auch nicht im Strict-Modus? (about:config → javascript.options.strict=true)
Diese Fehlermeldung des IE ist mir bisher auch noch nie untergekommen.
Einen schönen Montag noch.
Gruß, Ashura
Hallo,
Mozilla auch nicht im Strict-Modus? (about:config → javascript.options.strict=true)
oh, danke für den Tipp! Das "about:config" kannte ich noch gar nicht.
Habe javascript.options.strict auf true gesetzt, bekomme aber im Mozilla weiterhin keine Fehler.
Soll heißen: im Mozilla läuft alles einwandfrei und wie geschmiert.
Diese Fehlermeldung des IE ist mir bisher auch noch nie untergekommen.
Tja, vielleicht sollte ich sie ausdrucken und einrahmen...
:/
Ich konnte das Problem immerhin etwas eingrenzen: im IE werden beim ersten Laden meiner Seite die zwei Aufrufe von addLoadEvent() jeweils doppelt durchgeführt. Und das führt zum Fehler.
Nach einem Refresh der Seite werden die Aufrufe von addLoadEvent() ganz normal nur je einmal ausgeführt.
Wohlgemerkt: diese merkwürdige Verhalten gibt es nur im IE.
Leider bringt mir diese Erkenntnis gar nix.
Hier ein bißchen mehr Code:
Methode addLoadEvent (nix Neues, findet man per Google zigfach im Netz):
function addLoadEvent(func) {
if(typeof window.onload == "function") {
var oldFunc = window.onload;
window.onload = function() {
oldFunc();
func();
}
} else {
window.onload = func;
}
}
Die besagten zwei Aufrufe stehen im Head meiner Seite:
<script type="text/javascript">
try {
addLoadEvent(initObjects);
addLoadEvent(addTopLinks);
} catch(err) {
alert(err);
}
</script>
Und im IE werden diese Aufrufe eben beim ersten Laden doppelt ausgeführt....
Ciao,
Andreas
<script type="text/javascript">
try {
addLoadEvent(initObjects);
addLoadEvent(addTopLinks);
Ich bezweifle, dass die Funktion das tut was du willst. Du solltest die beiden Funktionen lieber in eine packen.
Zur Not so:
addLoadEvent( function() {
initObjects();
addTopLinks();
}
);
Das Problem ist vermutlich die anonyme Funktion die in addLoadEvent erzeugt wird.
Struppi.
Hallo,
Ich bezweifle, dass die Funktion das tut was du willst. Du solltest die beiden Funktionen lieber in eine packen.
nee, also an der addLoadEvent() sollte alles OK sein, denn sie läuft ja in anderen Projekten auch im IE einwandfrei.
Ich habe jetzt einmal im Seitenkopf die Funktionsaufrufe druch Test-Alerts umschlossen:
<script type="text/javascript">
alert(1);
addLoadEvent(initObjects);
alert(2);
addLoadEvent(addTopLinks);
alert(3);
</script>
Und im IE werden nun diese 5 Zeilen Javascript beim ersten Laden der Seite tatsächlich zweimal durchlaufen. Beim Reload dann aber - wie erwartet - nur einmal.
Für mich ist das im Moment unbegreiflich. Es gibt auch keine einzige andere direkte JS-Anweisung auf der Seite. Alles ist gekapselt.
Ciao,
Andreas
Hallo,
durch schrittweises Herantasten und Vergleiche mit einem Projekt ohne IE-Fehler konnte ich das Problem auf diese HTML-Zeile eingrenzen:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Ich schrieb nun stattdessen:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
Und der IE-Fehler war weg.
Vermutlich lag es daran, daß die JS-Dateien nicht UTF-8-kodiert sind. Das muß ich nun noch gegenprüfen.
Mich wundert nur, daß hier anscheinend mal der IE empfindlicher reagiert hat als Mozilla.
Ciao,
Andreas