Как получить cookieConsent Nav для автоматического расширения на мобильном телефоне? - PullRequest
0 голосов
/ 25 октября 2018

Фон

У меня есть веб-приложение ASP.Net Core v2.1, для которого флаг CheckConsentNeeded установлен в значение true при запуске.

services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;
        });

У меня естьформа регистрации на главной странице, которая использует [ValidateAntiForgeryToken] в действии публикации.

выпуск

Если кто-то пытается зарегистрироваться до того, как файлы cookie приняты, ониполучить следующую ошибку:

ERROR - ExceptionHandlerMiddleware - An unhandled exception has occurred while executing the request. System.FormatException: Input string was not in a correct format.

Требование

Я хочу автоматически развернуть панель cookieConsent на мобильном телефоне, пока они не примут файлы cookie, чтобы сделать их более очевиднымисделайте это вместо того, чтобы искать их вручную, нажав на значок гамбургера.

Выполненное действие

Я вижу код в _cookieConsentPartial, который дает мне нужный мне флаг (showBanner):

@{
    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
    var showBanner = !consentFeature?.CanTrack ?? false;
    var cookieString = consentFeature?.CreateConsentCookie();
}

@if (showBanner)
{

Я надеялся, что смогу добавить сюда некоторый код JQuery, чтобы добавить класс "in" в селектор .navbar-collapse.

$.when($.ready).then(function () {
        var $navBar = $(".navbar-collapse");
        if (!$navBar.hasClass("in")) {
            $navBar.addClass("in");
        }
    });

Однако 2вещи.

  1. Я не могу использовать JQuery в кулинарииeConsentPartial, потому что частичное загружено выше, чем файлы сценария.
  2. Если после загрузки страницы я запускаю сценарий JQuery в консоли, я получаю меню, а не содержимое cookieConsent.Кнопка гамбургера также перестает работать.

Кто-нибудь может предложить лучший способ реализовать это требование в Asp.Net Core 2.1?

1 Ответ

0 голосов
/ 26 октября 2018

Я вернулся к этому сегодня утром, и в конце концов оказалось, что реализовать его будет просто.

Мне просто нужно было добавить класс "in" в div navbar-collapse нижезаголовок navbar на _cookieConsentPartial.

<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
        <span class="sr-only">Toggle cookie consent banner</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
</div>
<div class="collapse **in** navbar-collapse">
    <p class="navbar-text">
        <i class="fa fa-info-circle"></i> We use our cookies and third party cookies to improve our services, obtain statistics, allow you to remember your login details, and to facilitate your interaction with social networks.
    </p>
    ...
...