Bug in FHEMWEB, websocket, URL contains a fragment identifier

Begonnen von malc_b, 27 Februar 2017, 20:02:52

Vorheriges Thema - Nächstes Thema

malc_b

Hi,

There seems to be a bug in FHEMWEB.  If I view my max valve log file the URL is

.....:8083/fhem/FileLog_logWrapper&dev=FileLog_MAX_Lounge1&type=text&file=MAX_Lounge1-2017.log

I can click refresh on the browser with that URL with no problem.  If I then jump the end the URL is

.....:8083/fhem/FileLog_logWrapper&dev=FileLog_MAX_Lounge1&type=text&file=MAX_Lounge1-2017.log#end_of_file

If  click browser refresh now I get this error message

fhemweb.js line 919:
Uncaught SyntaxError: Failed to construct 'WebSocket': The URL contains a fragment identifier ('end_of_file?XHR=1&inform=type=status;filter=;since=1488221958;fmt=JSON&fw_id=135×tamp=1488221959585'). Fragment identifiers are not allowed in WebSocket URLs.

Remove the #end_of_file and it is ok.  However this error does NOT occur with the main log file, this URL

.......:8083/fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2017-02.log#end_of_file

works fine and refreshes ok.

rudolfkoenig

Thanks for the report, I fixed it, available via update after tomorrow, 8:00 CET.

betateilchen

Hallo Rudi,

die fhemweb.js von heute morgen sorgt dafür, dass longpoll im Zusammenspiel mit InfoPanel im Browser (webviewcontrol) auf Android (4.0.4) nicht mehr funktioniert und die Verbindung zwischen Tablet und FHEM nach ca. 1 Minute abreißt. Mit anderen Kombinationen habe ich es noch nicht getestet.

Mit fhemweb.js #13516 ist alles noch ok.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Die besagte Aenderung betrifft nur websocket:

% svn diff -r13516 fhemweb.js
Index: fhemweb.js
===================================================================
--- fhemweb.js    (revision 13516)
+++ fhemweb.js    (working copy)
@@ -916,7 +916,7 @@

   var loc = (""+location).replace(/\?.*/,"");
   if(typeof WebSocket == "function" && FW_longpollType == "websocket") {
-    FW_pollConn = new WebSocket((loc+query).replace(/^http/i, "ws"));
+    FW_pollConn = new WebSocket(loc.replace(/[&?].*/,'').replace(/^http/i, "ws")+query);
     FW_pollConn.onclose =
     FW_pollConn.onerror =
     FW_pollConn.onmessage = FW_doUpdate;


Laut http://caniuse.com/#feat=websockets gibts websocket erst seit Android 4.4.
Bin offiziell ratlos.

betateilchen

Zitat von: rudolfkoenig am 28 Februar 2017, 20:47:38
Bin offiziell ratlos.

Schon das zweite Mal heute? *staun*

Leider kann ich Dir auch nicht mehr sagen, als dass die "alte" fhemweb.js funktioniert und die neue nicht.

Dass websocket erst ab 4.4. verfügbar sind, hatten wir neulich schonmal als Ursache für Probleme. Was kann ich tun, um Dich bei der Problemlösung zu unterstützen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Bist du _ganz_ sicher, das es daran liegt, bzw. dass das aktuelle fhembwe.js geladen wurde?
Hast du "longpoll websocket" eingestellt ?
Kannst du mir die JS-Console zeigen?
Welcher Browser laeuft auf dem Geraet? Stock oder Chrome?
Was liefert "trigger WEB JS:alert(typeof WebSocket)" ?

betateilchen

Den Browser hatte ich oben schon genannt: webviewcontrol, JS-Console gibts da nicht.

Hab die Seite jetzt mal im Stock-Browser des Tablets geladen, da kommt nach der gleichen Zeitspanne (ca. 1 Minute) ein Popup Fenster, in dem nur "undefined" steht.

Ein ähnlicher Fehler tritt auf, wenn ich das InfoPanel im Safari auf dem MacBook lade - siehe screenshot

Wenn ich trigger WEB JS:alert(typeof WebSocket) in Safari ausführe, hängt  mein FHEM eine Zeitlang in einer Ladeschleife, eine Ausgabe erfolgt nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Apropos Safari: was ist mir dem Desktop-Safari? Der hat naemlich eine Konsole :)
Das undefined Popup ist das was ich auf einem Nicht-WebSocket-Faehigen Browser erwarte.
Und wo ist die Antwort auf meinen ersten zwei Fragen abgeblieben?

betateilchen

Zitat von: rudolfkoenig am 28 Februar 2017, 21:13:41
Apropos Safari: was ist mir dem Desktop-Safari? Der hat naemlich eine Konsole :)

Ja, da bin ich auch grade draufgekommen. Aber bisher keine Auffälligkeiten.

Zitat von: rudolfkoenig am 28 Februar 2017, 21:13:41
Und wo ist die Antwort auf meinen ersten zwei Fragen abgeblieben?

Sorry, ich kämpfe nebenbei noch gegen diverse DNS Konfigurationen  8)


  • "attr web longpll 1" steht in meiner Konfiguration.
  • ja, es ist die aktuelle fhemweb.js geladen.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Nachdem FHEM vorhin bei den Versuchen, Deine Fragen zu beantworten, mehrfach abgestürzt ist, scheint es jetzt einfach so zu laufen, wie es soll.

Genau so ein Mysterium wie die Sache mit den nicht funktionierenden at-devices, die plötzlich auch wieder laufen - zum Glück nicht nur bei mir.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!