# Kompatibilität mit 3rd-Party Cookie-Plugins

In Version 4.18.0 wurde die Möglichkeit implementiert auch 3rd-Party Cookie-Manager-Plugins zu unterstützen.

Dabei wurde die Kommunikation mit dem Standard CookieConfigurator-Plugin in eine eigene Klasse ausgelagert, um diese anschließend überschreiben und die Funktion individualisieren zu können.

Für jedes 3rd-Party-Plugin muss dementsprechend ein eigener JS-Code geschrieben werden, um die Kompatibilität zu gewährleisten.

Im Anschluss folgt ein Beispiel eines solchen JS-Codes, welcher die Kompatibilität mit dem AcrisCookieConsentCS-Plugin (opens new window) herstellt.

# Beschreibung des Interface

class CookieConsentInterface {
    // Diese Methode nach der Initialisierung des CookieConfigurator's aufgerufen
    _onInit(): void

    // Diese Methode wird aufgerufen, sobald sich die Cookie-Auswahl geändert hat
    _onCookieConfigurationUpdated(updatedCookies: object): void

    // Hier werden Events registriert (u.a. für _onInit und _onCookieConfigurationUpdated)
    registerEvents(): void

    // Diese Methode wird aufgerufen um zu prüfen, ob der CookieConfigurator initialisiert wird.
    // Wenn die Methode `false` zurückliefert, wird die Methode `waitForInitialization` aufgerufen.
    isInitialized(): bool

    // Öffnen des CookieConfigurators
    open(): void

    // Die Methode dient dazu einen sogenannten Callback zu registrieren,
    // damit unsere Cookie-Klasse auf die geänderte Cookie-Auswahl reagieren kann
    onUpdate(callback: function): void

    // Wie oben beschrieben, wird diese Methode aufgerufen, wenn der CookieConfigurator noch nicht initialisiert ist
    // Technisch gesehen wird hier der `resolve`-Callback zwischengespeichert und in der `_onInit`-Methode aufgerufen.
    waitForInitialization(): Promise

    // Diese Methode sollte die Plugin-Instanz des CookieConfigurators zurückgeben
    getPluginInstance(): object

    // Diese Methode gibt standardmäßig `true` zurück gibt an, ob geprüft werden soll,
    // ob der Standard Cookie-Configurator aktiviert ist oder nicht
    shouldCheckIfCookieConsentIsEnabled(): bool
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# Beispiel zum Überschreiben der einzelnen Methoden

Die Methoden, deren Namen mit _ beginnen, sollten nicht überschrieben werden, da deren Aufgaben elementar für die korrekte Funktionsweise der Cookie-Abfrage sind.

Dieser Code sollte über den regulären Weg implementiert (opens new window) werden.

window.Neti.StoreLocator.getCookieConsentInterfaceClass = function() {
    const cookieConsentClass = window.Neti.StoreLocator.CookieConsentInterfaceClass;

    cookieConsentClass.prototype.open = function() {
        // Öffnen des eigenen Cookie-Konfigurators
    }

    return cookieConsentClass;
};
1
2
3
4
5
6
7
8
9

Wer sich mit dem originalen CookieConfigurator auseinandergesetzt hat, weiß, dass dieser standardmäßig kein Event feuert, sobald er initialisiert wurde. Dieses Problem haben wir gelöst, indem wir in der init-Methode des Plugins einen after-Hook platziert haben:

Dieses Event ist ebenfalls elementar für unsere Logik um zu wissen, wann dieses Plugin initialisiert wurde.

window.Neti.StoreLocator.PluginOverride('CookieConfiguration', {
    init: {
        after() {
            document.$emitter.publish(PLUGIN_CONFIGURATION_INIT);
        }
    }
});
1
2
3
4
5
6
7

# Kompatibilitäts-Beispiel mit AcrisCookieConsentCS

Wie oben bereits angekündigt, folgt hier das Beispiel mit dem Plugin AcrisCookieConsentCS, welches die grundlegende Kompatibilität mit unserem Plugin gewährleistet.

window.Neti.StoreLocator.getCookieConsentInterfaceClass = function() {
    const cookieConsentClass = window.Neti.StoreLocator.CookieConsentInterfaceClass;

    cookieConsentClass.prototype.open = function() {
        // Open the cookie manager
        this.getPluginInstance().openOffCanvas();

        // Ensure the cookie managers settings are opened
        if (!document.querySelector('.cookie-consent-setting-container').classList.contains('show')) {
            document.querySelector('#ccSettingButton').click();
        }
    }

    // Add an after-hook to the init method of the AcrisCookieConsent plugin to publish the required init event
    window.Neti.StoreLocator.PluginOverride('AcrisCookieConsent', {
        init: {
            after() {
                document.$emitter.publish('Neti_CookieConfiguration_Init');
            }
        }
    })

    return cookieConsentClass;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Sollten Sie Fragen ober Probleme bei der Integration haben, können Sie sich jederzeit bei uns melden (opens new window).