web-dev-qa-db-ja.com

CookieコンプライアンスとGoogleアナリティクス

Drupal 8.6.14(まもなくアップグレード予定))を使用していて、実際に機能するCookie同意ページを作成しようとしています!

私は EU CookieコンプライアンスGDPRコンプライアンス などのさまざまなモジュールを使用してきましたが、それらすべてがGoogleアナリティクスのCookieをブロックできません。

EU Cookie Compliance モジュールをサポートするためにコミュニティで見つけたGoogle Analyticsのパッチをいくつか使用しましたが、すべて失敗しました。

正確には、 EU Cookie Compliance はCookieを通常どおりにロードし、同意のダイアログが表示されたときに削除し、オプションを選択したらすべてを再度ロードするようです。

他のすべてのソリューションはまったく機能しないようです(ページが読み込まれるたびにCookieが取得されます)。ところで、私が見つけたすべてのソリューションは8バージョン未満のものです。

どうすればこれを達成できますか?何か不足していますか?

1
b10z

Drupal.orgの EU Cookieコンプライアンスモジュールのプロジェクトページ から:

モジュールに条件付きでCookieを設定する場合は、ユーザーが同意した場合にTRUEを返すJavaScript関数が用意されています。

Drupal.eu_cookie_compliance.hasAgreed()

たとえば、Googleアナリティクスを無効にする場合は、次のようにできます。 http://drupal.org/node/1648286#comment-61458

このコメントdagomar により、Google Analyticsでの使用方法の別の例が提供されています。

ユーザーが承諾ボタンをクリックした後にCookieを設定する方法を示す別の例を次に示します。 http://drupal.org/node/1624876#comment-6111688

私は個人的にこれを使用して、カスタムモジュールを作成し、モジュールのJavaScript動作にhasAgreed()への呼び出しを含めることで、コンプライアンスが許可されるまでサードパーティのコードスニペットが読み込まれないようにしました。

ただし、上記の最初の例が示すように、カスタムモジュールは特にGoogle Analyticsには必要ありません。次のコードをGoogle AnalyticsのAdvanced Settings-> Custom JSに追加するだけです。

_if (!Drupal.eu_cookie_compliance.hasAgreed()){
window['ga-disable-UA-xxxx-1'] = true;
}
_

EDIT(2020-02-23):

GDPRに非常に厳密に準拠し、同意が得られない限りCookieが読み込まれないようにする必要があるようです。

これは、EU Cookie Compilanceモジュールによって提供される同じhasAgreed() JavaScript動作を利用して、カスタムモジュールで行うことができます。

まず、サイトからコードスニペットを完全に削除し、プレースホルダーに置き換える必要があります。

HTMLヘッドのスクリプトが1つだけの場合は、_html.html.twig_を編集するだけです。

実行を禁止する必要のあるスクリプトが複数ある場合、それはより多くの作業になります。

私の場合、数十の異なるサードパーティフォームを空の_<div>_要素に置き換えました。

_<div id="1234" class="thirdPartyFormWrapper"></div>
_

私のカスタムJavaScript動作は、そのクラスを持つすべてのDOM要素を探します。

_document.getElementsByClassName('thirdPartyFormWrapper');
_

Div IDの4桁の数字は、各フォームの一意のサードパーティフォームIDに対応しています。

同意が許可されていない場合(またはEU Cookieコンプライアンスモジュールがインストールされていないか、有効になっておらず、hasAgreed()が使用できない場合)、カスタムモジュールは代替コンテンツを検索するための4桁のID(たとえば、「Cookieを受け入れてYoyodyne、Inc.のGnomovisionメーリングリストのサブスクリプションフォームを表示してください」など、特定のフォームであるとすればわかります。)

同意が付与された場合、カスタムモジュールは4桁のIDを使用して、各サードパーティフォームのJavaScriptスニペットをプレースホルダー_<div>_に挿入します。

フォームスニペットが挿入されたら、Cookieの処理方法を理解できます。同意しない場合、スニペットもCookieも読み込まれません。

このテクニックを使用して、次のパターンに従って、非常に厳密なGDPR準拠のCookieを処理することもできます。

_/**
 * Cookie handling for strict GDPR compliance
 */
  Drupal.behaviors.customCookieConsent = {
    attach: function (context, settings) {
      if (!Drupal.eu_cookie_compliance || !Drupal.eu_cookie_compliance.hasAgreed()) {
        // Bail out if cookie consent not given
        return;
      }
      // If cookie consent is given, set cookie (unless already set)
      if (!$.cookie('customConsentTime')){
        var consentTime = new Date();
        $.cookie('customConsentTime', consentTime.toISOString(), {expires: 3650});
      }
    },
  };
_

このアプローチは少し手間がかかりますが、同意が得られる前にスクリプトとCookieがまったく読み込まれないようにします。

最後に、ここでのコメントとDrupal.orgに基づいて、JavaScriptの「Drupal Behaviors」について調査する必要があると思います。これは、これまでに見られた " ncaught ReferenceError:Drupal is not defined) "メッセージを回避するのに役立ちます。

5
hotwebmatter

Drupal 9(およびDrupal 8)の場合、新しいモジュール(COOKiES https://www.drupal.org/project/ cookie ) "Google Analytics"と "Google Tag Manager"(およびその他)のモジュールをサポートします。

1