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.