martinmiethke: JS: Alternative für eval() zum Auslesen einer Variablen

Beitrag lesen

Was sagt denn die Konsole (F12)?

F12? Da passiert auf dem Mac nix :-)

Aber eine Konsole gibt’s trotzdem – dort heißt es:

ReferenceError: Can't find variable: cygcyg / Globaler Code – spsnd.htm:19

Hier nochmal der betreffende Code, mit Zeilennummern:

13 str = window.location.search;	// String ab dem Fragezeichen (Beispiel: ?art=v/cygcyg)
14 tmp = str.split("=");			// teilt str am Gleichheitszeichen
15 path = tmp[1];					// String nach dem Gleichheitszeichen
16 art = path.substr(2);			// String nach dem 2. Zeichen (Beispiel: cygcyg)
17 mp3 = "sound/arten/" + path + ".mp3";
18 text = sndtxt.get(art);
19 document.writeln('<p>' + text + '</p>'); // Beschreibungstext
20 document.write('<audio autoplay controls src="' + mp3 + '" type="audio/mp3"></audio>');

Das seltsame ist nun: Nur beim Singschwan funktioniert die Sache nicht! Ich kann’s einfach nicht verstehen, denn die Variablendeklaration sieht für ihn nicht anders aus als alle anderen. Hier die ersten Zeilen der betreffenden Datei:

const sndtxt = new Map();

sndtxt.set("cygolo", "Höckerschwan, Rufe (im&nbsp;Hintergrund Bruchwasserläufer, Wasserralle und Kreuzkröten)");
sndtxt.set("cygcyg", "Singschwan, Flugrufe");
sndtxt.set("braleu", "Weißwangengans, Rufe eines gerade vom Schlafplatz aufgebrochenen Trupps (außerdem Graugänse und eine Bachstelze)");
sndtxt.set("ansfab", "(Tundra-)Saatgans, Kontaktrufe eines fliegenden Trupps");

Auf dem Windows-Rechner meiner Frau meldet die Konsole übrigens viel mehr:

Das Öffnen mehrerer Popups wurde aufgrund fehlender Benutzeraktivierung blockiert. 	popsnd.js:4:7
Uncaught SyntaxError: "" string literal contains an unescaped line break	busnd.js:20:114
Uncaught ReferenceError: cygcyg is not defined	spsnd.htm:1:1
    <anonymous> http://www.untere-havel.info/spsnd.htm?art=v/cygcyg line 19 > eval:1
    <anonymous> http://www.untere-havel.info/spsnd.htm?art=v/cygcyg:19

Auch hier wird auf Zeile 19 hingewiesen – ansonsten verstehe ich da nicht viel …