Я создаю приложение для своего форума на устройствах iOS. К счастью, существует проект PWABuilder, который предоставляет готовый проект XCode для упаковки веб-приложения в нативное приложение. Это отлично сработало и с моим форумом на Discourse, однако в нём отсутствует кнопка «Назад» или другие элементы, упрощающие навигацию.
Приложение iOS, созданное с помощью PWABuilder (без навигационной панели внизу):
Теперь мой вопрос: можно ли отображать эту панель также внутри WKWebView? У меня есть идея, как это решить. Приложения, созданные с помощью PWABuilder, позволяют устанавливать куки при использовании. А если отображать эту навигационную панель, когда у пользователя есть кука, например, с именем «mobile_footer_nav»? Тогда проблема будет решена.
Настройки, которые можно установить в приложении, созданном с помощью PWABuilder (установка куки при использовании приложения):
Буду очень признателен, если команда разработчиков рассмотрит эту возможность.
(Я знаю, что существует приложение DiscourseHub, но отдельное приложение для форума — более элегантное решение, которое проще для пользователя в использовании и понимании.)
Вы можете добавить дополнительное условие в вашу тему — на вашем сайте Discourse — для проверки куки, например так:
const isWKWebView = () => {
// проверьте наличие куки и верните true, если она существует
// или используйте любой другой метод для определения, использует ли пользователь ваше приложение
}
Для других классов вы обычно могли бы изменить showFooterNav() следующим образом:
Однако это контроллер приложения, что означает, что он будет закэширован до того, как ваш код получит возможность выполниться. Другими словами, вы не сможете изменить класс.
Тем не менее, вы всё ещё можете изменить значение showFooterNav с помощью чего-то подобного:
Большое спасибо за быструю помощь. К сожалению, у меня возникает ошибка.
Я вставил эти строки кода в заголовок темы и также добавил проверку наличия куки в функцию isWKWebView(). Если куки нет, ничего не происходит. Пока это работает. Но если куки есть, эта панель, к сожалению, не отображается, и в консоли появляется ошибка: “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>