fhemweb führt ungewolltes Reload der Seite nach JS Aufruf durch

Begonnen von Blackcat, 14 Juli 2015, 20:40:40

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Mist. Lange gehofft und falsch geguckt.
Ich habe ein IOS7 Style

Blackcat

Kein Problem.

Mir ist auch aufgefallen, dass der Stand vom SVN auch nicht der aktuelleste war (Wiederherstellungspunkt von Sourceforge).. somit habe ich es nochmal eingecheckt
Viele Grüße Sandra - FHEM Style Entwicklerin iOS6+12
-----
ZBox nano, Homematic, Homebridge, Hue + Mi Light, ZWave, Dyson, etc.
https://www.foodcat.de
https://www.youtube.com/c/FoodCat (hier gibt es auch immer mehr Hausautomatisierungsvideos)

FunkOdyssey

@Rudolf: könntest du dir bitte das andere Problem (iOS7 Style) anschauen? Danke.

rudolfkoenig


FunkOdyssey

#19
So, ich habe die Änderungen gefunden, die den Fehler in GoogleChrome verursacht:

==> fhemweb.js: remove "Connection lost" messages on iOS when changing the room

Beitrag wurde nachträglich mehrmals aktualisiert.

rudolfkoenig

Ich habe mit dem standard fhem.cfg, aktuellen Chrome, Click mit Meta oder Shift auf Logfile keine Probleme.
Click aufs Logo bringt einen zu motd/defaultRoom, ios6 macht da was spezielles mit eigenen .js, was die anderen Styles nicht haben.

@FunkOdyssey: hast du das Problem immer noch? Wenn ja, bitte genau beschreiben, ich bin etwas durcheinander.


FunkOdyssey

Ich habe bei mir den o.g. Commit rückgängig gemacht und die fhemweb.js aus nem Update bis zum Fix herausgenommen. Der Fehler ist bei einer normalen Installation definitiv präsent.

Browser: GoogleChrome unter Windows
Style: iOS7

Beim Klick auf das Mausrad wird normalerweise ein neue Tab geöffnet und der sichtbare Inhalt bleibt unverändert. Doch die fehlerhafte Situation verursacht ein Laden des angeklickten Links auch im aktiven Tab. Somit wird der Link zweimal geladen.

rudolfkoenig

Da ich das Problem mAn gefixt habe, und es selbst nicht nachvollziehen kann: kann jemand sonst das Problem bestaetigen oder widerlegen? Evtl. wird eine falsche Version der Datei geladen (Cache?): mein fhemweb.js ist 30015 Bytes lang, die relevante Stelle ist:
        if(e.shiftKey || e.ctrlKey || e.metaKey) // Open link in window/tab
          return;

Ellert

Mein Problem ist mit dem Update gestern behoben: Strg + linke Maustaste öffnet einen neuen Tab, wie es sein soll.

FunkOdyssey

So, ich habe mich nochmal sortiert und bin erneut Schritt für Schritt durchgegangen.

Mit [r8916] "fhemweb.js: show set results in a dialog, not FW_errmsg (Forum #38875)" kann ich NOCH mit Klick auf die mittlere Maustaste ein neues Tab öffnen, ohne dass das aktive Tab auch diesen Inhalt lädt.

Mit
[r8928] "fhemweb.js: remove "Connection lost" messages on iOS when changing the room" taucht dieses Fehlverhalten auf.

Somit wird der Fehler durch diesen Commit verursacht:


--- a/trunk/fhem/www/pgm2/fhemweb.js
+++ b/trunk/fhem/www/pgm2/fhemweb.js
@@ -349,9 +349,19 @@
     attr = attr.replace(/^location.href='/,'');
     attr = attr.replace(/'$/,'');
   }
+
+
   var ma = attr.match(/^(.*\?)(cmd[^=]*=.*)$/);
-  if(ma == null || ma.length == 0 || !ma[2].match(/=(save|set)/))
+  if(ma == null || ma.length == 0 || !ma[2].match(/=(save|set)/)) {
+    ma = attr.match(new RegExp("^"+FW_root)); // Avoid "Connection lost" @iOS
+    if(ma) {
+      $(el).click(function() {
+        FW_leaving = 1;
+        location.href = attr;
+      });
+    }
     return;
+  }
   $(el).removeAttr("href");
   $(el).removeAttr("onclick");
   $(el).click(function() {


Google Chrome (unter Windows) hat die Versionsnummer 44.
Und der Fehler scheint Style-unabhängig zu sein. Auch im Default-Skin tritt dieser Fehler auf.

rudolfkoenig

Besteht das Problem mit einem aktuellen Version von fhemweb.js immer noch? In dem genannten Patch war meine vorher erwaehnte Zeile mit e.shiftkey usw. noch nicht enthalten, sie sollte das Problem beheben. Wenn das nicht der Fall ist, dann bitte vor der Zeile mit e.shiftkey folgendes einbauen:
console.log(e);
dann Seite neu laden, Problem reproduzieren, in der JavaScript Console das gemeldete Objekt (e) moeglichst vollstaendig oeffnen, und die Daten uns zeigen (Copy&Paste oder Bildschirmfoto).

FunkOdyssey

Zitat von: rudolfkoenig am 23 August 2015, 14:26:51
Besteht das Problem mit einem aktuellen Version von fhemweb.js immer noch? In dem genannten Patch war meine vorher erwaehnte Zeile mit e.shiftkey usw. noch nicht enthalten, sie sollte das Problem beheben.

Die fhemweb.js wurde letztmalig am 9. August geändert. Meine Posts kommen vom 10. August mit aktueller FHEM-Version. Dennoch habe ich erneut ein Update gemacht, den Cache gelöscht usw.
Es gibt auch keine Proxys, etc.

Zitat von: rudolfkoenig am 23 August 2015, 14:26:51
Wenn das nicht der Fall ist, dann bitte vor der Zeile mit e.shiftkey folgendes einbauen:
console.log(e);
dann Seite neu laden, Problem reproduzieren, in der JavaScript Console das gemeldete Objekt (e) moeglichst vollstaendig oeffnen, und die Daten uns zeigen (Copy&Paste oder Bildschirmfoto).

Das habe ich gemacht (siehe Screenshot). Aber ich konnte das Objekt nicht weiter öffnen.
Ich hatte http://fhem:8083 geöffnet (Startseite) und dann mit dem Mausrad auf den Raum "Automation" geklickt.

Das Tab mit der Startseite hat dann den Raum "Automation" geladen. Außerdem wurde (wie gewünscht) ein weiteres Tab aufgemacht mit dem gleichen Raum "Automation".

rudolfkoenig

ZitatAber ich konnte das Objekt nicht weiter öffnen.
Das ist schade, vlt. sehen wir mehr wenn du e.originalEvent ausgibst. Fuer mousewheel scheint es extra events zu geben, ich sehe in der Doku aber nur was von scrollen, nicht von clicken. Ausserdem scheint Firefox vom Rest sich zu unterscheiden.

Alternativ gewoehnst du dir Ctrl/Cmd-Linke-Maustaste an. :)

FunkOdyssey

Ich hab mir ein Breakpoint gesetzt und habe mir die Ausgabe mal näher angeschaut.

Anhand der üblichen Verdächtigen "shiftKey", "ctrlKey" usw. konnte ich nichts erkennen. Aber der Wert "button" war auf "1". Und laut http://wiki.selfhtml.org/wiki/JavaScript/Objekte/DOM/event/button wird darunter anscheinend die mittlere Maustaste verstanden.

Quick&dirty habe ich dann folgende versucht:


if(e.shiftKey || e.ctrlKey || e.metaKey || e.button == 1) // Open link in window/tab


Und es funktioniert.

rudolfkoenig