Invalides Formular-Token Shopware

Shopware und die alten Browser, hier ein weiteres Kapitel: Auf unserem Tablet Samsung Galaxy Tab 3 10.1 (GT-P5200) auf dem nativen Android-Browser erscheint in unserem Onlineshop auf der Kontaktseite und auf einigen anderen Seiten nach dem Versuch, ein Formular abzuschicken, der Hinweis "Invalides Formular-Token".

 

 

Was im Grunde kein Wunder ist, da der Formular-Token erst gar nicht erzeugt wird. Die Möglichkeit, die CSRF-Protection, die durch das Token gewährleistet werden soll (vgl. auch Magento CE 1er Updates), halten wir hierbei (selbstverständlich) nicht für sinnvoll. Nach langem Suchen ist uns dann die Datei 

 

/themes/Frontend/Responsive/frontend/_public/src/js/jquery.state-manager.js

 

in's Auge gefallen: In dieser Datei werden für zwei Metoden keine Fallbacks implementiert: Für

 

requestAnimationFrame

 

und

 

cancelAnimationFrame

 

Wenn hier z.B. der Fallback gem. https://wiki.selfhtml.org/wiki/JavaScript/Window/requestAnimationFrame#cancelAnimationFrame umgesetzt wird, könnten die relevanten Zeilen:

 

        /**

         * requestAnimationFrame proxy

         *

         * @public

         * @method requestAnimationFrame

         * @param {Function} callback

         * @returns {Number}

         */

        requestAnimationFrame: window.requestAnimationFrame.bind(window),

        /**

         * cancelAnimationFrame proxy

         *

         * @public

         * @method cancelAnimationFrame

         * @param {Number} id

         */

        cancelAnimationFrame: window.cancelAnimationFrame.bind(window),

 

in etwa so aussehen:

 

                               requestAnimationFrame : function () {

                                               var lastTime = 0;

                                               if (!window.requestAnimationFrame)

                                                               window.requestAnimationFrame = function(callback, element) {

                                                                              var currTime = new Date().getTime();

                                                                              var timeToCall = Math.max(0, 16 - (currTime - lastTime));

                                                                              var id = window.setTimeout(function() { callback(currTime + timeToCall); },

                                                                                timeToCall);

                                                                              lastTime = currTime + timeToCall;

                                                                              return id;

                                                               };

                               },

        /**

         * cancelAnimationFrame proxy

         *

         * @public

         * @method cancelAnimationFrame

         * @param {Number} id

         */

        cancelAnimationFrame : function () {

                                               if (!window.cancelAnimationFrame)

                                                               window.cancelAnimationFrame = function(id) {

                                                                              clearTimeout(id);

                                                               };

                               },

 

Und welch ein Wunder: Danach klappt's auch mit der CSRF-Protection in unserem mit Shopware 5.3.7 implementierten Onlineshop.