{"id":10990,"date":"2020-08-11T17:23:04","date_gmt":"2020-08-11T15:23:04","guid":{"rendered":"https:\/\/www.boc.de\/watchguard-info-portal\/?p=10990"},"modified":"2024-07-23T15:07:49","modified_gmt":"2024-07-23T13:07:49","slug":"tricks-zur-anpassung-der-hotspot-login-seite-des-gateway-wireless-controller","status":"publish","type":"post","link":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/2020\/08\/tricks-zur-anpassung-der-hotspot-login-seite-des-gateway-wireless-controller\/","title":{"rendered":"Tricks zur Anpassung der Hotspot-Login-Seite des Gateway Wireless Controller"},"content":{"rendered":"<p>In diesem Blog-Beitrag wollen wir die Hotspot-Login-Seite des Gateway Wireless Controllers ver\u00e4ndern, damit sie unter Mobile Devices etwas h\u00fcbscher aussieht und besser bedienbar wird.<\/p>\n<p><!--more--><\/p>\n<p>Man kann zwar ein Logo auf die WatchGuard hochladen und diverse Texte (Willkommens-Text, Terms-of-Service, \u00dcberschrift) definieren,<br \/>\naber die Logon-Buttons und Eingabefelder sind weiterhin mit vorgegebenen Texten (englisch) beschriftet.<\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h46_58.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10991 size-full alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h46_58.png\" alt=\"\" width=\"753\" height=\"501\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h46_58.png 753w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h46_58-300x200.png 300w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h46_58-272x182.png 272w\" sizes=\"(max-width: 753px) 100vw, 753px\" \/><\/a><\/p>\n<p>Zudem sind sie leider in der mobilen Ansicht schwer lesbar und schwer benutzbar.<\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h47_47.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-10993 size-full alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h47_47.png\" alt=\"\" width=\"426\" height=\"545\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h47_47.png 426w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h47_47-234x300.png 234w\" sizes=\"(max-width: 426px) 100vw, 426px\" \/><\/a><\/p>\n<p>Mit einigen Tricks (Stylesheets und Javascript) lassen sich die Elemente aber ver\u00e4ndern.<\/p>\n<p>Der Trick hierbei ist, das Javascript-Element in die Box f\u00fcr den Wilkommens-Text zu schreiben; die CSS-Elemente kommen in die Box f\u00fcr die Terms-of-Service:<\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h55_33.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10995 alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h55_33.png\" alt=\"\" width=\"587\" height=\"695\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h55_33.png 587w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_16h55_33-253x300.png 253w\" sizes=\"(max-width: 587px) 100vw, 587px\" \/><\/a><\/p>\n<p>Hierbei muss man mit Tricks arbeiten, um vorhandene Elemente zu umgehen oder zu \u00fcberschreiben. beispielsweise eine vorhandene textarea vor dem CSS schlie\u00dfen und und danach unter anderer ID wieder \u00f6ffnen. Das auftrennen ist ebenfalls notwendig, da der Willkommens-Bereich auf 2048 Characters begrenzt ist.<\/p>\n<p>Mit folgenden CSS und Javascript Elementen sind wir erfolgreich gewesen (<strong>Achtung: Javascript muss zwingend ins Welcome-Feld, CSS ins Terms-and-Conditions-Feld<\/strong>):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;\/textarea&gt;\r\n&lt;style type=\"text\/css\"&gt;\r\n&lt;!--\r\n\r\n#hsDivId {\r\n    width:95%;\r\n    text-align: left;\r\n    background-color: #FFF;\r\n    border: 5px solid gray;\r\n    overflow: auto;\r\n    margin:2px;\r\n    padding: 18px 0 8px 44px;\r\n    background-repeat: no-repeat;\r\n    min-height: 500px;\r\n    width: 100% !important;\r\n    height: 100% !important;\r\n}\r\n#hsEulaTxtId {\r\n    min-height:400px;\r\n    width: 100% !important;\r\n    height: 100% !important;\r\n}\r\n\r\n\/* hier die Ma\u00dfe des Logos hinterlegen *\/\r\n#hsLogoId {            \r\n    max-width: 300px !important;          \r\n    max-height: 300px !important;\r\n    clear: both;\r\n}\r\n\r\n#hsContinueId {\r\n    float:left !important;\r\n}\r\n\r\n\/* hier die Gr\u00f6\u00dfe der Checkbox *\/\r\n#hsAcceptCkbId {\r\n    width: 70px;\r\n    height: 70px;\r\n    margin-right: 15px;\r\n    margin-top: 20px;\r\n}\r\n#hsEulaTxtId {\r\n    display:none;\r\n}\r\n#hsEulaTxtId2 {\r\n    display:none;\r\n}\r\n\r\n\/* hier die Gr\u00f6\u00dfe des \"akzeptiert\"-Textes *\/\r\n#hsAcceptLabelId {\r\n    color:white;\r\n    font-size:80px;\r\n}\r\n\r\n#hsEulaDivId {\r\n    width:80%;\r\n}\r\n\r\n#hsDivId {\r\n    height:100% !important;\r\n    max-height: 100% !important;\r\n    overflow:auto;\r\n}\r\n\r\n#hsContinueId {\r\n    display:none;\r\n    width: 400px;\r\n    height: 110px;\r\n}\r\n\r\nh3 {\r\n    clear: both;\r\n}\r\n\r\ntd {\r\n    font-size:80px;\r\n}\r\n\r\n\/* hier die Gr\u00f6\u00dfe der User\/Passwort-Eingabefelder *\/\r\ninput {\r\n    height:80px;\r\n    font-size: 80px;\r\n    width:400px;\r\n}\r\n\r\ntable {\r\n    display: none;\r\n}\r\n\r\n--&gt;&lt;\/style&gt;\r\n&lt;textarea id=\"hsEulaTxtId2\" cols=\"\" rows=\"\" readonly=\"yes\"&gt;\r\n\r\n... hier folgen die eigentlichen Terms-and-Conditions ...<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;script&gt;\r\nsetTimeout(function(){ \r\n\r\n    var tds = document.getElementsByTagName('td');\r\n    for (var i = 0; i &lt; tds.length; i++) {\r\n    tds[i].innerHTML=tds[i].innerHTML.replace(\"User&amp;nbsp;Name&amp;nbsp;\",\"Name&amp;nbsp;\");\r\n    tds[i].innerHTML=tds[i].innerHTML.replace(\"Passphrase&amp;nbsp;\",\"Passwort&amp;nbsp;\");\r\n    }\r\n    var tables = document.getElementsByTagName('table');\r\n\r\n    for (var i = 0; i &lt; tables.length; i++) {\r\n    tables[i].style.display=\"block\";\r\n    }\r\n        \r\n    let newNode = document.createElement(\"div\");\r\n    newNode.style.width=\"100%\";\r\n    newNode.innerHTML=nl2br(getE(\"hsEulaTxtId2\").innerHTML);\r\n    getE(\"hsEulaDivId\").appendChild(newNode);\r\n\r\n\r\n    getE(\"hsContinueId\").value=\"weiter\";\r\n    getE(\"hsContinueId\").style.display=\"block\";\r\n    getE(\"hsAcceptLabelId\").innerHTML=\"Ich habe die Nutzungsbedingungen gelesen\";\r\n    getE(\"hsAcceptLabelId\").style.color=\"black\";\r\n    getE(\"hsAcceptLabelId\").addEventListener(\"click\",switchCheck,false);\r\n}, 500);\r\n\r\nfunction switchCheck()\r\n{\r\n    if(document.getElementById(\"hsAcceptCkbId\").checked)\r\n    {\r\n    getE(\"hsAcceptCkbId\").checked=false;\r\n    } else {\r\n    getE(\"hsAcceptCkbId\").checked=true;\r\n    }\r\n    updateContinueBtn();\r\n}\r\n\r\nfunction getE(elem)\r\n{\r\n    return document.getElementById(elem);\r\n}\r\n\r\nfunction nl2br (str, is_xhtml) {\r\n    if (typeof str === 'undefined' || str === null) {\r\n        return '';\r\n    }\r\n    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '&lt;br \/&gt;' : '&lt;br&gt;';\r\n    return (str + '').replace(\/([^&gt;\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)\/g, '$1' + breakTag + '$2');\r\n}&lt;\/script&gt;\r\n<\/pre>\n<p>Infos zum Javascript-Bereich:<\/p>\n<ul>\n<li>timeout muss unbedingt vorhanden sein, da die ganze Seite zun\u00e4chst geladen sein muss, bevor wir mit Javascript die Elemente darin ansprechen k\u00f6nnen. die 500ms hier sind vielleicht etwas kurz und k\u00f6nnen bei Bedarf auf 1000ms oder mehr erh\u00f6ht werden, allerdings ist dann das verhalten der Seite etwas &#8220;seltsam&#8221;; weil sie erst nach 1000ms oder mehr korrekt angezeigt wird.<\/li>\n<li>die Texte f\u00fcr Name\/Passwort sowie &#8220;Nutzungsbedingungen akzeptiert&#8221; und &#8220;Continue&#8221; werden im Javascript ersetzt (und k\u00f6nnen dort angepasst werden).<\/li>\n<li>\u00a0die eigentlichen Text-Area-Bl\u00f6cke werden mithilfe des CSS auf &#8220;nicht darstellen&#8221; gesetzt, vom Javascript gelesen und als normaler HTML-Text mittels nl2br ausgegeben. Hier sollte man sogar mit HTML in den Terms-and-Conditions arbeiten k\u00f6nnen.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Das Ergebnis schaut dann wie folgt aus und ist unserer Meinung nach auf Handys wesentlich besser benutzbar; die Schriftgr\u00f6\u00dfe der Eingabefelder haben wir f\u00fcr Mobile Devices entsprechend angehoben, sie ist nat\u00fcrlich f\u00fcr den PC\/Laptop vielleicht etwas zu gro\u00df geraten:<\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10997 alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20.png\" alt=\"\" width=\"1452\" height=\"486\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20.png 1452w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20-300x100.png 300w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20-1024x343.png 1024w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20-768x257.png 768w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20-800x268.png 800w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_20-1200x402.png 1200w\" sizes=\"(max-width: 1452px) 100vw, 1452px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10998 alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38.png\" alt=\"\" width=\"1450\" height=\"732\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38.png 1450w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38-300x151.png 300w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38-1024x517.png 1024w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38-768x388.png 768w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38-800x404.png 800w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h02_38-1200x606.png 1200w\" sizes=\"(max-width: 1450px) 100vw, 1450px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>f\u00fcr Mobile Ger\u00e4te ergibt sich dann folgendes Bild:<\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_23.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10999 alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_23.png\" alt=\"\" width=\"445\" height=\"415\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_23.png 445w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_23-300x280.png 300w\" sizes=\"(max-width: 445px) 100vw, 445px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_42.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-11000 alignnone\" src=\"https:\/\/www.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_42.png\" alt=\"\" width=\"467\" height=\"401\" srcset=\"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_42.png 467w, https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-content\/uploads\/2020\/08\/2020-08-11_17h03_42-300x258.png 300w\" sizes=\"(max-width: 467px) 100vw, 467px\" \/><\/a><\/p>\n<p>Herzlichen Dank an meinen Kollegen Martin D\u00f6rr f\u00fcr die Unterst\u00fctzung im Bereich CSS und Javascript; sowie an <a href=\"https:\/\/stackoverflow.com\/questions\/7467840\/nl2br-equivalent-in-javascript\" target=\"_blank\" rel=\"noopener\">Stackoverflow f\u00fcr eine praktikable nl2br Funktion<\/a>\u00a0zur besseren Darstellung des Terms-of-Service-Textes.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Disclaimer etc:<\/strong><\/p>\n<ul>\n<li>Das ganze ist nicht wirklich so vorgesehen und daher fast schon &#8220;b\u00f6ser hack[tm]&#8221; zu sehen. Es kann keine Garantie gegeben werden, dass dies auch mit dem n\u00e4chsten Fireware Release unver\u00e4ndert funktioniert, oder \u00fcberhaupt noch so machbar ist.\u00a0 <strong style=\"font-size: inherit;\"><strong style=\"font-size: inherit;\">Nachbau auf eigene Gefahr!<\/strong><\/strong><\/li>\n<li>Vorlagen f\u00fcr Datenschutz-Bestimmungen (Terms-and-Conditions) finden Sie im Internet, z.B unter <a href=\"https:\/\/www.datenschutz-guru.de\/mustervertrag-nutzungsbedingungen-fuer-gaeste-wlan\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.datenschutz-guru.de\/mustervertrag-nutzungsbedingungen-fuer-gaeste-wlan\/<\/a><\/li>\n<\/ul>\n<p><span style=\"font-size: inherit;\">Bei Fragen erreichen Sie uns unter <\/span><a style=\"font-size: inherit; background-color: #ffffff;\" href=\"https:\/\/www.boc.de\/support\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.boc.de\/support\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Blog-Beitrag wollen wir die Hotspot-Login-Seite des Gateway Wireless Controllers ver\u00e4ndern, damit sie unter Mobile Devices etwas h\u00fcbscher aussieht und besser bedienbar wird.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,362],"tags":[629,570,155,476,667],"class_list":["post-10990","post","type-post","status-publish","format-standard","hentry","category-watchguard-allgemeine-informationen","category-howto","tag-gaeste-wlan","tag-gastnetzwerke","tag-gateway-wireless-controller","tag-hotspot","tag-wlan-hotspot"],"_links":{"self":[{"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/posts\/10990"}],"collection":[{"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/comments?post=10990"}],"version-history":[{"count":12,"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/posts\/10990\/revisions"}],"predecessor-version":[{"id":21191,"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/posts\/10990\/revisions\/21191"}],"wp:attachment":[{"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/media?parent=10990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/categories?post=10990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.boc.de\/watchguard-info-portal\/wp-json\/wp\/v2\/tags?post=10990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}