强制页脚导航与 Cookie

Discourse 根据某些条件渲染该页脚。页脚在此处添加。

discourse/app/assets/javascripts/discourse/app/templates/application.hbs at a0bbc346cb5d5b89d1a3efdfa89869349a8b067f · discourse/discourse · GitHub

showFooterNav 在此处定义。

discourse/app/assets/javascripts/discourse/app/controllers/application.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

如果其中任意一个为 true,导航栏将会显示。

isiOSPWA()isAppWebview() 在此处定义。

discourse/app/assets/javascripts/discourse/app/lib/utilities.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

例如,isAppWebview() 的实现如下。

discourse/app/assets/javascripts/discourse/app/lib/utilities.js at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

您可以在主题(即您的 Discourse 站点)中创建一个额外的条件来检查 Cookie,方法如下:

const isWKWebView = () => {
  // 检查 Cookie 并在存在时返回 true
  // 或使用其他任何方法来检测用户是否正在使用您的应用程序
}

对于其他类,您通常可以按如下方式修改 showFooterNav()

api.modifyClass("controller:application", {
  pluginId: "show-footer-nav",
  @discourseComputed
  showFooterNav() {
    // ...
  }
});

然而,这是应用程序控制器,这意味着它会在您的代码有机会执行之前被缓存。换句话说,您将无法修改该类。

尽管如此,您仍然可以通过以下方式更改 showFooterNav 的值:

<script type="text/discourse-plugin" version="0.8">
  const isWKWebView = () => {
    // 检查并返回您的条件
  };

  if (isWKWebView()) {
    const applicationController = api.container.lookup("controller:application");
    applicationController.set("showFooterNav", true);
  }
</script>

将其放在主题的 header 标签页中,或者如果您使用的是远程主题,则放在初始化器中。

5 个赞