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.