ich bin dabei, eine App für mein Forum auf iOS-Geräten zu erstellen. Glücklicherweise gibt es ein Projekt namens PWABuilder, das ein fertiges XCode-Projekt bereitstellt, um eine Web-App in eine native App zu verpacken. Das hat auch mit meinem Discourse-Forum hervorragend funktioniert, jedoch fehlt eine Zurück-Taste oder ähnliches, was die Navigation erleichtern würde.
iOS-App, generiert mit PWABuilder (keine Navigations-Leiste unten):
Meine Frage lautet nun: Könnte diese Fußleiste auch innerhalb einer WKWebView angezeigt werden? Ich habe zudem eine Idee, wie man das lösen könnte. Apps, die mit PWABuilder erstellt wurden, bieten die Möglichkeit, beim Einsatz ein Cookie zu setzen. Wie wäre es damit: Die Navigations-Leiste wird immer dann angezeigt, wenn der Benutzer ein Cookie wie „mobile_footer_nav" besitzt? Dann wäre das Problem gelöst.
Einstellungen, die in einer mit PWABuilder erstellten App vorgenommen werden können (Cookie bei App-Nutzung):
Ich wäre sehr dankbar, wenn das Entwicklungsteam sich das einmal ansehen könnte.
(Ich weiß, dass es die DiscourseHub-App gibt, aber eine separate App für ein Forum ist die elegantere Lösung und für den Benutzer einfacher zu bedienen und zu verstehen.)
Sie können in Ihrem Theme – auf Ihrer Discourse-Website – eine zusätzliche Bedingung erstellen, um nach dem Cookie zu suchen, wie folgt:
const isWKWebView = () => {
// nach dem Cookie suchen und true zurückgeben, falls vorhanden
// oder eine andere Methode verwenden, um zu erkennen, ob der Benutzer Ihre Anwendung nutzt
}
Für andere Klassen könnten Sie normalerweise die showFooterNav()-Methode wie folgt ändern:
Dies ist jedoch der Application-Controller, was bedeutet, dass er zwischengespeichert wird, bevor Ihr Code ausgeführt werden kann. Mit anderen Worten: Sie können die Klasse nicht ändern.
Trotzdem können Sie den Wert von showFooterNav mit etwas wie folgendem ändern:
<script type="text/discourse-plugin" version="0.8">
const isWKWebView = () => {
// prüfen und Ihre Bedingung zurückgeben
};
if (isWKWebView()) {
const applicationController = api.container.lookup("controller:application");
applicationController.set("showFooterNav", true);
}
</script>
entweder im Reiter „Header" Ihres Themes oder in einem Initialisierer, wenn Sie ein Remote-Theme verwenden.
Vielen Dank für die schnelle Hilfe. Leider erhalte ich einen Fehler.
Ich habe diese Codezeilen im Header des Themas eingefügt und in isWKWebView() auch die Möglichkeit zum Prüfen von Cookies hinzugefügt. Wenn ich kein Cookie habe, passiert nichts. Das funktioniert vorerst. Wenn ich jedoch ein Cookie habe, wird diese Leiste leider nicht angezeigt, und in der Konsole erscheint ein Fehler: „TypeError: Attempted to assign to readonly property."
<script type="text/discourse-plugin" version="0.8">
function getCookie(cname) {
let name = cname + "=";
let decodedCookie = decodeURIComponent(document.cookie);
let ca = decodedCookie.split(';');
for(let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
if (getCookie("app-platform") != "") {
const applicationController = api.container.lookup("controller:application");
applicationController.set("showFooterNav", true);
}
</script>