Plötzlich Frontend Probleme auf dem Handy (Windows Phone)

Begonnen von dougie, 07 März 2014, 09:19:21

Vorheriges Thema - Nächstes Thema

awel

#15
Hallo,
ein vergleichbares Verhalten hatte ich mit IE11 unter WIN8.1 auf meinem Desktop-PC. Mit Longpoll=1 funktionierten auch da die Schaltflächen nur ein mal je Icon-Grafik. Außerdem hing die Sache vom verwendeten Style ab.
Abhilfe brachte für mich eine Änderung des Cache-Verhaltens (ich glaube, bei den Dateien im Cache waren auch recht merkwürdige Gültigkeitsdaten angegeben, bin mir da aber nicht mehr sicher. Wegen der teilweise nur bedingt hilfreichen Windows-Kommentare habe ich das auch nicht weiter verfolgt).

Zitat"Neuere Versionen der gespeicherten Seiten suchen" steht standardmäßig auf automatisch; ändert man die Einstellung auf "bei jedem Zugriff auf die Webseite" klappt's auch mit dem IE11.
(Antw:Schalten in FHEMWeb nicht zuverlässig).

Noch habe ich keine Windows-Phone, vielleicht gibt es eine entsprechende Einstellung aber auch dort.

Badflex

Das selbe auch bei meinem WP.
Ich denke es liegt am Internet Explorer 11.
Auf meinem surface ist es das gleiche Problem. Manche icons werden nicht angezeigt und ähnliche probleme.
In der Desktop variante geht es nur im Firefox richtig.
Im touch modus ist es grausam und kaum zu bedienen.
Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

awel

Zitat von: Badflex am 10 Oktober 2014, 23:33:39
In der Desktop variante geht es nur im Firefox richtig. Im touch modus ist es grausam und kaum zu bedienen.
Kann ich so nicht bestätigen! Die Desktop-Einstellungen greifen auch im Touch-Modus.
Wie gesagt: IE11 Desktop-Version -> Menü Extras -> Internetoptionen -> Register Allgemein-Browserverlauf -> Einstellungen -> Register Temporäre Internetdateien -> Einstellung "Bei jedem Zugriff auf die Webseite"

Danach funktioniert bei mir FHEM im IE11 sowohl in der Desktop-Version (PC, Notebook, Tablett) als auch im WIN8-Kachel-/Touchmodus (Tablett) absolut einwandfrei! Mit Longpoll, in allen Styles!

ZitatIch denke es liegt am Internet Explorer 11
Nach der oben beschriebenen Erfahrung ist mir das als Erklärung zu einfach. Für so simple Argumente bin ich auch zu alt.  8)
Aber wenn man im Markt so etabliert ist (oder gar nicht etabliert sein will), dass man auf knapp 90% der Betriebssystem-Nutzer und gut 60% der eingesetzten Browser verzichten kann bzw. will, bitteschön. Nein, ich möchte keine weitere IE11-Windows-Microsoft-Diskussion; diesen Unfug gab's ähnlich schon Anfang der 80er mit damals ganz anderen Systemen - lange bevor jemand überhaupt an Windows oder Linux dachte.


rudolfkoenig

ZitatAber wenn man im Markt so etabliert ist (oder gar nicht etabliert sein will), dass man auf knapp 90% der Betriebssystem-Nutzer und gut 60% der eingesetzten Browser verzichten kann bzw. will, bitteschön.

Meine Sicht der Dinge: es reicht mir, wenn ich fuer 10% der potentiellen Benutzer kostenlosen Support anbiete.

Diese 10% sind im Durschnitt(!) technisch versierter, was weniger Support, und mehr Beitraege zum Projekt bedeutet.
Dass bisher sich keiner bereit erklaert hat, Windows Support in FHEM zu uebernehmen, ist ein Beleg fuer diese Theorie.

awel

#19
Wer entwickelt entscheidet  8)

Aber mal zurück zum Thema IE11 und den Schaltflächen-Problemen:

  • Das Problem taucht (bisher?) nur bei den Schaltflächen auf,
  • diese Schaltflächen rufen die Funktion FW_cmd auf,
  • das Problem lässt sich durch Änderung der Cache-Einstellung des IE11 lösen. Dummerweise gilt diese Einstellung aber für alle Webseiten und ist nicht unbedingt generell gewünscht; ob man das Cache-Verhalten auf den Windows-Phones mit IE11 ändern kann ist unklar.
Etwas googeln zeigt auch, dass beim IE11 ein XMLHttpRequest die Cache-Control-Einstellungen ignoriert. Also ein IE11-Problem!  ;) (IE11. XMLHttpRequest ignores Cache-Control headers)

Als "quick and dirty test" habe ich mal einfach in der Datei fhemweb.js in der Funktion FM_cmd den Get-Aufruf in einen Post-Aufruf geändert, da "POST" auf keinen Fall "gecached" wird.

function
FW_cmd(arg)     /* see also FW_devState */
{
  arg = addcsrf(arg);
  var req = new XMLHttpRequest();
  /*vorher GET, IE11 hat no-cache-Problem, POST wird nicht gecached */
  req.open("POST", arg, true);
  req.send(null);
  req.onreadystatechange = function(){
    if(req.readyState == 4)
      FW_errmsg(req.responseText, 5000);
  }
}


Und siehe da: Der IE11 verhält sich jetzt mit Standard-Cache-Einstellungen normal, die FHEM-Schaltflächen funktionieren bei mir damit wie sie sollen.
Gegengetestet habe ich mit einem Android-Smartphone und Firefox auf dem Desktop und dem IE11 auf dem Tablett im Kachel- und Desktop-Modus.
Scheint bei mir zu funktionieren.

Jetzt ist es an euch Fachleuten, zu sagen, ob und wo diese Änderung Probleme bereitet, oder wie man den Cache für XMLHttpRequest auch beim IE11 gescheit abschaltet.

Es wäre auch schön zu wissen, ob die Schaltflächen damit auf den Windows-Phones jetzt funktionieren.

awel

Nachtrag:
Der IE nutz wohl standardmäßig - im Gegensatz zu anderen Browsern - den Cache auch für XMLHttpRequests. Die Einstellung Cache-Control:no-cache scheint nicht zu reichen, um ihm das abzugewöhnen.
Nach dem im letzten Posting verlinkten Artikel reicht aber ein
  qConn.setRequestHeader("Pragma", "no-cache");

Dann funktioniert es auch mit dem ursprünglichen GET und dem IE.

function
FW_cmd(arg)     /* see also FW_devState */
{
  arg = addcsrf(arg);
  var req = new XMLHttpRequest();
  req.open("GET", arg, true);
  req.setRequestHeader("Pragma", "no-cache");
/*req.setRequestHeader("Cache-Control", "no-cache");*/
  req.send(null);
  req.onreadystatechange = function(){
    if(req.readyState == 4)
      FW_errmsg(req.responseText, 5000);
  }
}

rudolfkoenig

Da ist mir POST lieber, ich habe es jetzt auch ersetzt und eingecheckt.
Danke fuer die Nachforschungen und Tests.

awel

Danke!
Gibt es noch andere Stellen, an denen man dem IE das Caching abgewöhnen sollte?

rudolfkoenig

Bin unsicher, die beiden anderen XHR Stellen im Code sind longpoll und die aktuellen Werte fuer ein Attribut zu holen. Beides geht bestimmt auch mit POST, schaut aber komisch aus. Longpoll verwendet die primitive (und robuste) Cache-Abschalter-Methode, indem ein Parameter der Query auf die aktuelle Zeit gesetzt wird.