• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Mein Javascript funktioniert nicht unter IOS Safari, warum?

Balisto

New member
Ich kenne mich mit Javascript nicht gut aus. Ich verwende es für einen Microkontroller um damit über Wlan einen LED-Streifen zu steuern. //Edit:Zur Kommunikation nutze ich Websockets. Es funktioniert auch alles bestens am PC und unter Android. Nur unter IOS Safari funktioniert es nicht, wenn folgende Funktion im Script enthalten ist.

Code:
function sendRGB() {
    var r = document.getElementById('r').value**2/1023;
    var g = document.getElementById('g').value**2/1023;
    var b = document.getElementById('b').value**2/1023;
    var rgb = r << 20 | g << 10 | b;
    var rgbstr = '#'+ rgb.toString(16);    
    console.log('RGB: ' + rgbstr); 
    websock.send(rgbstr);
}

Warum funktioniert das unter IOS Safari nicht und was muss ich ändern damit die Funktion erhalten bleibt aber es unter IOS Safari funktioniert?

Danke!
 
Zuletzt bearbeitet:
Ja ich nutze Websockets (Diese fehlende Info habe ich eben nachgetragen im ersten Beitrag).
IOS auf dem Ipad ist 9.3.1. Das Iphone war von einem Kumpel, daher kann ich das jetzt nicht sagen. Java ist natürlich enabled.

Es ist offensichtlich das es an einem Javascript Programmierfehler liegt. PC und Android gehen damit wohl etwas kulanter um. Aber da ich mich nicht gut genug mit Javascipt auskenne, kann ich den Fehler nicht finden.

Ich hatte zuvor noch einen anderen Fehler drin:
Code:
var x = document.getElementById("idOfSelectInput").selectedIndex;	
var y = document.getElementById("idOfSelectInput").options;
connection.send(y[x].index);
Erst als ich die zweite Zeile entferne und den code der dritten Zeile entsprechend angepasst hatte, hat es funktioniert unter IOS Safari. Mit Android hat es auch so funktioniert.

Hier mein kompletter Code:
Code:
var websock;
function start() {
  websock = new WebSocket('ws://' + window.location.hostname + ':81/');
  websock.onopen = function(evt) { console.log('websock open'); };
  websock.onclose = function(evt) { console.log('websock close'); };
  websock.onerror = function(evt) { console.log(evt); };
  websock.onmessage = function(evt) {
    console.log(evt);
    var e = document.getElementById('ledstatus');
    if (evt.data === 'ledon') {
      e.style.color = 'red';
    }
    else if (evt.data === 'ledoff') {
      e.style.color = 'black';
    }
    else {
      console.log('unknown event');
    }
  };
}

function buttonclick(e) {
  websock.send(e.id);
}


function effekt1() {
    var x = document.getElementById("idOfSelectInput").selectedIndex;	
    websock.send('*'+x);	
    console.log('effekt: ' + value); 
}

function rainbowEffect(){
    rainbowEnable = ! rainbowEnable;
    if(rainbowEnable){
        websock.send("R");
        document.getElementById('rainbow').style.backgroundColor = '#00878F';
        document.getElementById('r').className = 'disabled';
        document.getElementById('g').className = 'disabled';
        document.getElementById('b').className = 'disabled';
        document.getElementById('r').disabled = true;
        document.getElementById('g').disabled = true;
        document.getElementById('b').disabled = true;
    } else {
        websock.send("N");
        document.getElementById('rainbow').style.backgroundColor = '#999';
        document.getElementById('r').className = 'enabled';
        document.getElementById('g').className = 'enabled';
        document.getElementById('b').className = 'enabled';
        document.getElementById('r').disabled = false;
        document.getElementById('g').disabled = false;
        document.getElementById('b').disabled = false;
        sendRGB();
    }  
}

Sobald ich aber diesen Code einfüge geht es wieder nicht unter IOS Safari:
Code:
function sendRGB() {
    var r = document.getElementById('r').value**2/1023;
    var g = document.getElementById('g').value**2/1023;
    var b = document.getElementById('b').value**2/1023;
    var rgb = r << 20 | g << 10 | b;
    var rgbstr = '#'+ rgb.toString(16);    
    console.log('RGB: ' + rgbstr); 
    websock.send(rgbstr);
}

Hier soll aus dem Rückgabewert der drei Slider (r,g,b) der RGB (Farbwerte) String erstellt und gesendet werden.

Warum reagiert der Safari auf Fehler so empfindlich? Am PC und Android ist das alles kein Problem.
 
Ich denke mal, es liegt am ** Operator, der erst in ECMAScript 2016 eingeführt wurde. Verwende statt dessen doch Math.pow().
 
Zurück
Oben