esp8266 websocket auf IOS/Iphone funktioniert nicht mit spiffs aber ohne ?!

Mit meiner Anwendung kann ich mit einem esp-01 über das Web und Websockets einen LED Sreifen kontrollieren (Geschwindigkeit, Helligkeit und die Effekte einstellen). Die Webseite (index.html) und die dafür benötigten Dateien (.css, .js) läd er von den Spiffs.
An meinem PC und an meinem Android Smartphone und Tablet funktioniert das alles bestens.
Aber an einem IOS Smartphone oder Tablet funktioniert das nicht!! Dort wird die Websockets Verbindung aus dem Javascript nicht aufgebaut.
Andererseits habe ich ein auf dem selben libraries basierendes einfache test script ausprobiert (siehe hier: ESP8266 Web server with Web Socket to control an LED · GitHub letzter comment von DIYman ) Mit dem funktionieren die Websockets. Nach stundenlangen Versuchen und fragen wieso - weshalb - warum, habe ich festgestellt es liegt an den Spiffs. Also daran das ich die Webseite und alles dazugehörige von den Spiffs lade.

Ich habe also in meiner Anwendung die index.html und alles andere testhalber nicht von den SPiffs geladen, sonder in der Anwendung direkt aus einer variable. Und so funktioniert es einwandfrei. Selbst wenn ich das javascript direkt in html einbinde reicht das nicht aus. Es muss komplett alles in eine html und aus einer variable direkt in der anwendung geladen werden. Also komplett ohne spiffs! Nur so funktioniert es.

Edit:// Wie sich herausgestellt hat, ist ein Fehler im Javascript verantwortlich dafür das es unter ISO / Safari nicht funktioniert. Siehe Vier Beiträge weiter

Warum macht IOS / Iphone/ Safari (zumindest die zwei von mir getesteten) da mucken?` Und vor allem wie bekomme ich meine Anwendung auf auf IOS / Safari zum funktionieren?

Klar könnte ich notfalls alles in der Variable lassen aber das finde ich nicht sonderlich praktisch wenn man Änderungen vornehmen möchte.

Meine Anwendung basiert auf diesem example: ESP8266/A-WebSocket_LED_control.ino at master · tttapa/ESP8266 · GitHub

Wäre echt nett wenn mir da jemand weiter helfen könnte. Danke!

Mein Spiffs zugriff:

void startSPIFFS() { // Start the SPIFFS and list all contents
  SPIFFS.begin();                             // Start the SPI Flash File System (SPIFFS)
  Serial.println("SPIFFS started. Contents:");
  {
    Dir dir = SPIFFS.openDir("/");
    while (dir.next()) {                      // List the file system contents
      String fileName = dir.fileName();
      size_t fileSize = dir.fileSize();
      Serial.printf("\tFS File: %s, size: %s\r\n", fileName.c_str(), formatBytes(fileSize).c_str());
    }
    Serial.printf("\n");
    server.serveStatic("/WebSocket.js", SPIFFS, "/WebSocket.js");    
    server.serveStatic("/", SPIFFS, "/index.html");    
    server.serveStatic("/manifest.json", SPIFFS, "/manifest.json");    
    server.serveStatic("/success.html", SPIFFS, "/success.html");    
    server.serveStatic("/main.css", SPIFFS, "/main.css");    
    server.serveStatic("/edit.html", SPIFFS, "/edit.html");    
  }
}

Funktioniert das auf dem PC mit Safari oder nur auf iOS mit Safari nicht?

Auf PC mit Safari habe ich es nicht getestet.
Jedenfalls funktioniert es nicht auf einem Iphone und Ipad mit Safari Browser.

Machen Spiffs das ganze vielleicht zu langsam für IOS safari? So das es vielleicht zu Timeouts kommt womit Safari nicht klar kommt aber alles anderes schon?

Ich denke da werden die Leute dein Sketch brauchen um es selbst zu probieren, packs also in zip und her damit.
Mit Safari auf dem Mac kann ich testen.

Danke für dein Angebot. Ich konnte den Fehler mittlerweile finden.

Es liegt am Javascript code. Und zwar mag IOS Safari folgende Funktion nicht:

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);
}

Nur weil diese Funktion in der WebSocket.js enthalten sind, funktioniert websockets nicht. Die Seite wird angezeigt im IOS Safari aber die Websockets Verbindung wird nicht hergestellt. Und das obwohl die funktion für die websockets Verbindung ganz oben im Script steht.

Beides funktioniert einwandfrei am PC und Android aber nicht bei IOS Safari. Mit effekt1 möchte ich den Index eines gewählten Eintrages in einer Listbox erhalten um den entsprechenden Effekt ablaufen zu lassen.

Hat von euch jemand eine Idee was ich anpassen müsste damit es auch unter ios Safari funktioniert?

Warum das ganze in einer Variable funktioniert und nicht wenn es von Spiffs kommt ist mir ein Rätsel. Entferne ich die beiden Funktionen aus dem Script funktioniert es auch wenn es von den Spiffs kommt.
Aber das ist nicht mehr wichtig.... jetzt gilt zu klären warum der code unter ios nicht funktioniert.

Ist hier eigentlich schon Mal jemand weiter gekommen? Ich stehe ebenfalls vor dem Problem das ich einen 100% funktionierenden Code habe, der läuft aber nicht unter iOS. Habe daher die Standard Beispiele unter GitHub - Links2004/arduinoWebSockets: arduinoWebSockets
So wie ESP8266/Examples/14. WebSocket/A-WebSocket_LED_control at master · tttapa/ESP8266 · GitHub
Getestet und auch diese funktionieren nur unter Android, Chrome, Firefox aber nicht iOS und Mac Safari.

Da solltest Du wohl mal in Cuppertino nachfragen.

Gruß Tommy