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.
Habs eingecheckt, konnte es aber nicht wirklich testen.
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)
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
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.
@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 {
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.
Mit der veränderten regexp die vor Deinem Beitrag hier im Thread steht, funktioniert es ja auch wieder...
dann ist ja alles gut ...
Habe den Patch von Vorgestern eingespielt.