Drupal 8.6.14(まもなくアップグレード予定))を使用していて、実際に機能するCookie同意ページを作成しようとしています!
私は EU Cookieコンプライアンス 、 GDPRコンプライアンス などのさまざまなモジュールを使用してきましたが、それらすべてがGoogleアナリティクスのCookieをブロックできません。
EU Cookie Compliance モジュールをサポートするためにコミュニティで見つけたGoogle Analyticsのパッチをいくつか使用しましたが、すべて失敗しました。
正確には、 EU Cookie Compliance はCookieを通常どおりにロードし、同意のダイアログが表示されたときに削除し、オプションを選択したらすべてを再度ロードするようです。
他のすべてのソリューションはまったく機能しないようです(ページが読み込まれるたびにCookieが取得されます)。ところで、私が見つけたすべてのソリューションは8バージョン未満のものです。
どうすればこれを達成できますか?何か不足していますか?
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) "メッセージを回避するのに役立ちます。
Drupal 9(およびDrupal 8)の場合、新しいモジュール(COOKiES https://www.drupal.org/project/ cookie ) "Google Analytics"と "Google Tag Manager"(およびその他)のモジュールをサポートします。