Hallo da draussen,
ich nutze IPSView hier auf verschiedenen Betriebssystemen und verschiedenen Clients: Windows, iOS, iPadOS und macOS.
Leider funktioniert auf macOS die HTML-Box (noch?) nicht. Da ich natürlich nicht für jeden Client eine eigene IPSView schreiben möchte (ist mittlerweile sehr umfangreich geworden), habe ich zu den Seiten mit HTML-Boxen jeweils eine Alternative mit Textboxen erstellt.
Nun suche ich eine Möglichkeit, dass IPSView „erkennt“, dass es auf macOS „läuft“ und statt der HTML-Box-Seite die Text-Box-Seite aufruft, entweder durch Aufruf einer eigenen Seite oder aber über eine Seite, die alle Boxen enthält und je nach Client nur die passenden Boxen anzeigt.
Dabei muss bedacht werden, dass gegebenenfalls mehrere verschiedene Clients gleichzeitig aktiv sind, wodurch die Nutzung der Versteckt- oder SichtbarkeitsVariablen nicht infrage kommt. Die hätte Auswirkung auf alle Clients.
Ist so etwas über Workflows realisierbar (mit denen ich bisher noch überhaupt keine Erfahrungen und Kenntnisse habe)?
LG
Andreas
Hier suche ich auch schon seit längerer Zeit nach einer Möglichkeit, dass IPS View erkennt, auf welchem Client es läuft und man diese Erkennung über den View Designer nutzen kann. Leider ist mir keine Möglichkeit bekannt. Daher ein dafür …
Technisch gesehen, wäre die Info im HTTP-Header „user-agent“ enthalten. Wo der Browser dem Webserver (ip-symcon webfront) mitteilt welcher Browser und von welchem OS es ist und welche Sprache, etc.
Hatte in einer Webapplikation mal das Problem mit dem PDF öffnen, dass auf dem ios nicht korrekt dargestellt wurde, dann hatte ich was programmiert für die Unterscheidung.
Die Frage ist nur, wie kommt man im IPS-View an diese Infos heran. Hat man Zugriff auf die Server-Variablen bzw. die HTTP-Header ?
Aktuell steht im Skript bei Verwendung von ViewConnect die ViewID zur Verfügung, durch ViewCopy könnte Ihr jedem Client eine eigene View erstellen
„user-agent“ ist ja letztendlich auch nicht wirklich eindeutig.
@APieroth
Deine Anforderung ist mir noch nicht klar - selbst wenn ich den Client irgendwo mitgebe ändert das noch nichts am Snapshot den der Client zur Darstellung der Werte verwendet.
Wenn Dein HTML so „einfach“ ist, dass Du die Info auch mit einer TextBox darstellen kannst, dann hab ich eventuell eine Lösung für Dich. Der Client hat eine Möglichkeit einfaches HTML nativ darzustellen.
Dazu in den HMTL Header einfach die folgende Zeile reinschreiben:
<meta name="IPSView" content="flutter_widget_from_html" />
CSS und dergleichen wird nicht unterstützt, einfache HTML Elemente aber schon
Hallo Andreas,
ich habe von meiner Visualisierung einen Master, der dann für verschiedene Clients „aufbereitet“, will sagen kopiert wird, um den verschiedenen Betriebssystemen und Auflösungen Rechnung zu tragen (also: Master zu iPad, Windows, Webfront, macOS, Android).
Es ist mir dabei klar, dass es nur einen Snapshot für alle Visualisierungen gibt. Meine Überlegung war allerdings, ob es eine Möglichkeit gibt, dass je nach Client z.B. verschiedene PopUps oder Detailseiten geöffnet werden (also bei allen Clients mit HTML-„Fähigkeit“ ein(e) Popup/Detailseite mit HTML-Box, ohne HTML-„Fähigkeit“ eben die entsprechende Seite mit Textbox. Es müssten dazu im Snapshot beide Seiten vorliegen).
Ich vermute allerdings, dass diese „Fähigkeit“ im Client eingebaut werde müsste und nicht „von aussen“ programmiert werden kann. Die Entscheidung, welche Seite aufgerufen werden muss, fällt schliesslich im Augenblick des Aufrufs.
Tatsächlich ist mein HTML nicht sonderlich kompliziert. Es handelt sich meist um Tabellen, die von verschiedenen Modulen erzeugt werden (z.B. BatterieMonitor von Bayaro, Symcon IntegrityCheck etc) aber auch Ausgaben, die ich mit eigenen Skripten erzeuge.
Gerade bei den vorgefertigten Modulen ist es schwierig, sie auch zu einer reinen Textausgabe zu bewegen, will ich doch nicht den kompletten Code umbauen. Spätestens beim nächsten Update müsste ich dies immer wieder wiederholen.
Ich werde mal testen, ob ich hier mit dem von dir genannten HTML-Header weiter komme oder die Ausgaben der genannten Module eventuell über das „einfache“ HTML hinaus gehen.
Im Grunde ist es viel Aufwand für wenig Nutzen. So oft nutze ich IPSView auf meinem MachBook gar nicht. Wenn ich dann allerdings mal damit nachsehen möchte, welche (Fehler-)Meldung da gerade aufgelaufen ist und diese in HTML ausgegeben wird, dann geht das nicht.
LG
Andreas
Hm, leider brachte der Vorschlag mit dem Header keinen Erfolg.
Ich habe
<head><meta name="IPSView" content="flutter_widget_from_html" /></head>
und auch mal
<header><meta name="IPSView" content="flutter_widget_from_html" /></header>
eingetragen.
Egal was, ich sehe nur „Ein Browser wird in diesem Client nicht unterstützt“.
Gerade getestet - funktioniert bei mir bei einer HTMLBox, das ist egal, wichtig ist dass der exakte String irgendwo im HTML vorkommt
Habe es gerade bei mir auch nochmal getestet, ohne dabei den HTML-Output eines meiner Module zu nutzen, sondern einen ganz einfachen
Ja, funktioniert.
Vermutlich beinhaltet der HTML-Output meiner Module eben jenen HTML-Code, der nicht kompatibel ist, weswegen ich dann genannte Meldung erhalte.