Zur Navigation

ELSE-Bedingung entfernen

1 Sabine1 (Gast)

Hallo Jörg,
beim folgenden Skript benötige ich die ELSE-Bedingung nicht und möchte diese entfernen (also dann bräuchte ich die WENN-Abfrage auch nicht), weiß aber nicht, wie das ganze Skript dann aussehen muss.
Könntest du mir dies bitte mitteilen?
onload = function() {
    if ('speechSynthesis' in window) with(speechSynthesis) {
        var playEle = document.querySelector('#play');
        var pauseEle = document.querySelector('#pause');
        var stopEle = document.querySelector('#stop');
        var flag = false;
        playEle.addEventListener('click', onClickPlay);
        pauseEle.addEventListener('click', onClickPause);
        stopEle.addEventListener('click', onClickStop);
        function onClickPlay() {
            if(!flag){
                flag = true;
                utterance = new SpeechSynthesisUtterance(document.querySelector('.tts').textContent);
		utterance.voice = getVoices().find(function(val){return val.lang === 'de-DE'});
                utterance.onend = function(){
                    flag = false; playEle.className = pauseEle.className = ''; stopEle.className = 'stopped';
                };
                playEle.className = 'played';
                stopEle.className = '';
                speak(utterance);
            }
             if (paused) { /* unpause/resume narration */
                playEle.className = 'played';
                pauseEle.className = '';
                resume();
            } 
        }
        function onClickPause() {
            if(speaking && !paused){ /* pause narration */
                pauseEle.className = 'paused';
                playEle.className = '';
                pause();
            }
        }
        function onClickStop() {
            if(speaking){ /* stop narration */
                /* for safari */
                stopEle.className = 'stopped';
                playEle.className = pauseEle.className = '';
                flag = false;
                cancel();

            }
        }
    }
    else { /* speech synthesis not supported */
        msg = document.createElement('h5');
        msg.textContent = "Detected no support for Speech Synthesis";
        msg.style.textAlign = 'center';
        msg.style.backgroundColor = 'red';
        msg.style.color = 'white';
        msg.style.marginTop = msg.style.marginBottom = 0;
        document.body.insertBefore(msg, document.querySelector('div'));
    }
}

13.06.2017 13:17

2 Jörg Kruse

Das if-else-Gerüst besteht aus den markierten Zeilen:

onload = function() {
    if ('speechSynthesis' in window) with(speechSynthesis) {
        /* soll immer ausgefuehrt werden */
    }
    else { /* speech synthesis not supported */
        /* soll entfernt werden */
    }
}

Das kannst du also löschen, inklusive dem Part, der innerhalb von else { ... } steht:

onload = function() {
    /* soll immer ausgefuehrt werden */
}

13.06.2017 14:10

3 Sabine1 (Gast)

Hallo Jörg, danke für deine Antwort.

Schon bevor ich die Anfrage gestellt habe, habe ich das ganze so ausprobiert, aber es funktioniert nicht. Siehe hier:
http://nirvana.bplaced.net/301/

Hier ist das Original, welches mehr oder weniger funktioniert
http://nirvana.bplaced.net/300/
(Ich habe geschrieben, dass das mehr oder weniger funktioniert, weil die Pause-Funktion zwar das vorlesen anhält, aber wenn man diese Taste wieder zurück, da passiert leider nichts mehr. Daher habe ich im obigen Beispiel auch den ganzen Teil bezüglich der Pause-Funktion entfernt)

13.06.2017 14:31

4 Jörg Kruse

Bei mir funktioniert leider auch das Original nicht - obwohl meine Firefox- und Chromium-Versionen speechSynthesis unterstützen sollten :(

Warum möchtet du den else Abschnitt eigentlich entfernen? so erhält man doch ggf. den Hinweis, wenn Speech Synthesis vom Browser nicht unterstützt wird.

13.06.2017 22:25

5 Sabine1 (Gast)

Also bei mir funktioniert das Original.

Die ganze Sache sollte ja in allen modernen Browsern funktionieren. Bei einem Internet Explorer fusioniert das Ganze nicht und bei einem Internet Explorer möchte ich es so haben, dass die Schaltflächen kann nicht angezeigt werden. Ein Skript dazu habe ich schon gefunden.
Aber ich werde mir die Sache noch einmal genau überlegen.

Danke für deine Antwort.
Dir noch einen schönen Tag

14.06.2017 15:55

6 Jörg Kruse

Ich habe unter Linux espeak installiert, aber Firefox scheint dies nicht nutzen zu wollen. Naja, vielleicht ein ander mal...

Bei einem Internet Explorer fusioniert das Ganze nicht und bei einem Internet Explorer möchte ich es so haben, dass die Schaltflächen kann nicht angezeigt werden.

Dann kannst du doch den else Abschnitt genau dazu nutzen, denn dafür ist er ja da! Aktuell wird darin eine Fehlermeldung eingeblendet, du kannst aber ja alternativ die Buttons ausblenden. Also so in der Art:

    else { /* speech synthesis not supported */
        document.querySelector('#play').style.display = 'none';
        document.querySelector('#pause').style.display = 'none';
        document.querySelector('#stop').style.display = 'none';
    }

Das gilt dann eben nur für die Browser, die speech synthesis nicht unterstützen. Wenn neuere Versionen des IE das dann irgendwann können, zeigen sie auch die Buttons an.

14.06.2017 17:02 | geändert: 14.06.2017 17:03

7 Sabine1 (Gast)

Hallo Jörg,
vielen vielen Dank für deinen Tipp!
Das ist eine deutlich bessere Lösung, als das, was ich vorhatte.
Freut mich sehr, dass du mir das mitgeteilt hast.
Dir noch einen schönen Tag

15.06.2017 09:16

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]