Wie ich bereits in meinem vorherigen Artikel gezeigt habe, gibt es ein paar unschöne Probleme wenn man versuchen möchte aus einem Artikel in WordPress eine JavaScript-Funktion per Link aufzurufen. Dies ließ sich zwar grundsätzlich lösen, funktionierte aber für meine spezielle Funktion immer noch nicht. Falls also noch jemand eine JavaScript-Funktion nutzt, die ein Cookie löscht bzw. dessen Wert verändert, folgt in diesem Artikel der Workaround eines Workarounds…
Problem
Aus irgendeinem Grund funktioniert eine Änderung eines Cookies nicht mit der „document.cookie“-Funktion in meinem Javascript-Code, wenn ich diesen wie in dem anderen Artikel einbaue. Stattdessen habe ich den entsprechenden Part mit den Links und die genutzten JavaScript-Funktionen einfach in eine eigene von WordPress losgelöste html-Datei ausgelagert. Wenn ich diese aus der HTML-Datei ausführe gibt es nichts zu beanstanden.
Lösung
Meine erste Idee war es dann einfach die zum Testen erstellte HTML-Datei zu behalten und diese aufzurufen. Innerhalb dieser kann ja auch ohne Interaktion des Benutzers der entsprechende JavaScript-Code direkt ausgeführt werden. An sich funktionierte das auch. Es gab nur leider ein weiteres unschönes Problem. Da so eine weitere geöffnete Seite ja unschön ist und nicht vom Benutzer zu schließen sein sollte, wollte ich dies einfach ebenfalls durch JavaScript direkt im Anschluss an die Ausführung meiner Funktion erledigen lassen. Leider stellte ich nach erfolglosem Herumprobieren und etwas Recherche dann fest, dass mit JavaScript’s „Window.Cloase“ leider nur bereits per JavaScript geöffnete Fenster wieder geschlossen werden können.
Dies kann man auch hier nachlesen: https://medium.com/javascript-in-plain-english/closing-a-window-with-javascript-beeec56344bb
Somit wäre hier wahrscheinlich noch eine JavaScript-Funktion, die man in WordPress aufruft nötig, die das neue Fenster öffnet. Das ist mir aber zu dämlich und wirklich weit am Ziel vorbei geschossen.
Ich habe letzt endlich einfach die HTML-Datei behalten und old-school-mäßig per „IFrame“ in meiner WordPress-Seite wieder eingebunden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<html> <head> <script> // Reset settings by deleting the cookie function delCookie() { document.cookie = "bla=;expires=Thu, 01 Jan 1970 00:00:01 GMT;"; } // optout function optoutCookie() { document.cookie = "bla=deny;"; } </script> </head> <body> <strong>Ablehnen:</strong> <p>Sie können mit einem Klick auf <a href="javascript:optoutCookie()">diesen Link</a> das Cookie deaktivieren.</p> <strong>Zulassen:</strong> <p>Mit einem Klick auf <a href="javascript:delCookie()">diesen Link</a> das Cookie wieder entfernen und neu setzen.</p> </body> </html> |
1 |
<iframe style="border: 0; height: 200px; width: 600px;" src="/cookies.html"></iframe> |
Das Ergebnis könnte dann z.B. so aussehen:
Dies sieht so zwar nicht schön aus, weil ich keinen Bock mehr hatte die CSS-Regeln für diese Html-Datei zu pflegen, aber da es sowieso nur für die Datenschutzerklärung ist: who cares… Es wurde eh schon zu viel Zeit dafür verschleudert.
Fazit
Ein weiterer wirklich unschöner Workaround für eine eigentlich einfache Sache, der viel Zeit und Nerven verschwendet hat.