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

Beitrag lesen

Hallo miteinander,

zunächst vorab: meine Website habe ich vor vielen Jahren aufgebaut und dann lange Zeit nur noch Texte und Bilder ergänzt; der Code ist also ziemlich veraltet.

Worum es geht: Klick auf ein Icon in einer Tabelle mit Vogelarten soll ein kleines Fenster öffnen, in dem ein MP3 abgespielt und ein erklärender Text dazu angezeigt wird. Dem Icon ist ein Link zugewiesen, der je nach Tabellenzeile z.B. so aussehen kann:

<a href="javascript:ops('v/cygcyg')"><img ></a>

"v" ist der Ordner, in dem die MP3-Dateien mit Vogelstimmen liegen (es gibt auch noch Ordner für Amphibien und Heuschrecken); "cygcyg" ist das Kürzel für den Singschwan.

Mit der Funktion ops() wird eine HTML-Datei aufgerufen:

function ops(daten) {
url = "spsnd.htm?art=" + daten;
popsnd = window.open(url, "snd", "status=no,width=300,height=160,left=60,top=60");
popsnd.focus();
}

Ein JS innerhalb des Dokuments soll dann den Inhalt der Seite „zusammenbauen“:

<head>
<meta charset="utf-8" />
<title>Tonaufnahme</title>
<script type="text/javascript" language="JavaScript" src="scripts/busnd.js"></script>
</head>
<script language="JavaScript">
<!--
str = window.location.search;	// String ab dem Fragezeichen (Beispiel: ?art=v/cygcyg)
tmp = str.split("=");			// teilt str am Gleichheitszeichen
path = tmp[1];					// String nach dem Gleichheitszeichen
art = path.substr(2);			// String nach dem 2. Zeichen (Beispiel: cygcyg)
mp3 = "sound/arten/" + path + ".mp3";
text = eval(art);
document.writeln('<p>' + text + '</p>'); // Beschreibungstext
document.write('<audio autoplay controls src="' + mp3 + '" type="audio/mp3"></audio>');
// -->
</script>

In busnd.js sind die Erklärtexte jeweils einer Variablen zugeordnet, die genauso benannt ist wie das zugehörige MP3, also z.B.:

cygcyg = "Singschwan, Flugrufe";

Das hat auch mal funktioniert – aber eine Überprüfung nach einer längeren Pause ergab, dass jetzt nur noch ein leeres Fenster geöffnet wird. Durch Testen konnte ich herausfinden, dass das an der eval-Funktion liegt (die ja, wie ich inzwischen weiß, nicht mehr verwendet werden soll). Nun suche ich nach einer Alternative und habe auch schon im Netz danach gesucht, konnte aber nichts passendes finden.

Weiß jemand Rat?

Herzliche Grüße Martin