[Wunsch] FHEMWEB Extensions in neuem Browser-Tab/-Fenster öffnen

Begonnen von betateilchen, 31 Januar 2015, 11:28:02

Vorheriges Thema - Nächstes Thema

betateilchen

Seit langem stört mich, dass bei Klick auf "RSS" oder "GDS Files" die jeweiligen Übersichten das laufende FHEM Frontend ersetzen, da diese HTML Seiten kein explizites target besitzen. Deshalb habe ich mich auf die Suche nach einer möglichst wenig aufwändigen Lösung gemacht und bin zu folgenden vier Zeilen code in 01_FHEMWEB gekommen:


Index: 01_FHEMWEB.pm
===================================================================
--- 01_FHEMWEB.pm (revision 7780)
+++ 01_FHEMWEB.pm (working copy)
@@ -1281,8 +1281,10 @@
         }

         # Force external browser if FHEMWEB is installed as an offline app.
-        if($l2 =~ m/.html$/ || $l2 =~ m/^http/) {
-           FW_pO "<td><div><a href=\"$l2\">$icon$l1</a></div></td>";
+        my $target = '';
+           $target = 'target=\"_blank\" ' if $l2 =~ s/\+//;
+        if($l2 =~ m/.html$/ || $l2 =~ m/^http/ || length($target)) {
+           FW_pO "<td><div><a href=\"$l2\" $target >$icon$l1</a></div></td>";
         } else {
           FW_pH $l2, "$icon$l1", 1, $class;
         }


Damit hat man die Möglichkeit, beim Registrieren einer FWEXT einfach dem Link ein "+" voranzustellen, um zu kennzeichnen, dass dieser Link in einem neuen Tab/Browser geöffnet werden soll.

Beispiel:


sub GDS_addExtension($$$) {
    my ($func,$link,$friendlyname)= @_;
      my $url = "/" . $link;
    $data{FWEXT}{$url}{FUNC} = $func;
    $data{FWEXT}{$url}{LINK} = "+$link";
    $data{FWEXT}{$url}{NAME} = $friendlyname;
}


Diese simple Lösung funktioniert hier seit zwei Tagen problemlos und verhält sich transparent gegenüber bestehenden Anwendungen, die bereits eigene FWEXT registrieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig


betateilchen

Danke. Du kannst das Ergebnis relativ simpel mit der eben von mir eingecheckten GDS-Version testen:



define gdstest GDS bla bla



Dananch hast Du links im fhem-Menü einen Eintrag "GDS Files". Wenn Du diesen Link anklickst, sollte sich die Auswahlliste der Wetterkarten in einem neuen Tab/Fenster öffnen. (echte Inhalte kommen da natürlich keine,  aber darum gehts in diesem Test nicht)

Danach kannst Du das GDS device einfach wieder löschen. Der Menüeintrag verschwindet nach dem nächsten fhem-Neustart. (ich hab das Undefine noch nicht ausprogrammiert, da ich dabei erst prüfen muss, ob es sich um das letzte GDS device handelt)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

UliM

Hi,
möglicherweise gibt's hier nen Nebeneffekt:
http://forum.fhem.de/index.php?topic=33181.new#new
Ist nur ein Verdacht wegen des '+' im menuEntries...
Gruß, Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

betateilchen

#4
es gibt offenbar eine simple Lösung: in den menuEntries die "+" Zeichen durch "%20" ersetzen.

Edit: Das mit den %20 steht übrigens auch so in der commandref, dort ist weit und breit nichts von einem Pluszeichen als Leerzeichenersatz zu lesen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

@Rudi: mit einer verbesserten regexp können wir das Problem mit dem Pluszeichen in menuEntries vermeiden:


Index: 01_FHEMWEB.pm
===================================================================
--- 01_FHEMWEB.pm (revision 7816)
+++ 01_FHEMWEB.pm (working copy)
@@ -1282,7 +1282,7 @@

         # Force external browser if FHEMWEB is installed as an offline app.
         my $target = '';        # Forum 33066
-           $target = 'target=\"_blank\" ' if($l2 =~ s/\+//);
+           $target = 'target="_blank"' if($l2 =~ s/^$FW_ME\/\+/$FW_ME\//);
         if($l2 =~ m/.html$/ || $l2 =~ m/^http/ || length($target)) {
            FW_pO "<td><div><a href=\"$l2\" $target >$icon$l1</a></div></td>";
         } else {

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

justme1968

das + zeichen ist im query teil offiziell als ersatz für das leerzeichen vorgesehen:

Within the query string, the plus sign is reserved as shorthand notation for a space. Therefore, real plus signs must be encoded. This method was used to make query URIs easier to pass in systems which did not allow spaces.

das ist nicht fhem spezifisch sondern ist vom w3c in einem rfc geregelt.

von daher ist es eine unglückliche wahl wenn das mit dem dieser änderung  nicht mehr möglich ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Mit der veränderten regexp die vor Deinem Beitrag hier im Thread steht, funktioniert es ja auch wieder...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

rudolfkoenig