Onlineshops mit Shopware sind ordentlich aufzubauen und bieten eine gute Usability für Shopbetreiber und Nutzer - mit älteren Browsern jedoch steht Shopware - anders kann man es leider nicht nennen - auf Kriegsfuß. Hier ein Beispiel, wie Shopware einen Onlineshop-Programmierer einige Stunden kosten kann: Im Standardtemplate von Shopware kann man das Dropdown-Servicemenü oben rechts nicht öffnen, da dies nach kurzem Aufklappen umgehend wieder verschwindet. Aufgetreten ist dieses Problem auf einem Samsung Galaxy Tab 3 10.1 (GT-P5200) auf dem nativen Android-Browser. Grund ist hier das gleichzeitige Ausstatten mit "click"- und "touchstart"-Listenern, welches in
/themes/Frontend/Responsive/frontend/_public/src/js/jquery.drop-down-menu.js
implementiert ist, genauer in der Zeile
me._on(me.$el, 'touchstart click', $.proxy(me.onClickMenu, me));
Was moderne Browser ausnahmslos verstehen ist bei unserem Galaxy Tab 3 nun besondert zu behandeln. So ist ein Weg, die Funktion "onClickMenu" anzupassen und diese in dieser Form zu verändern:
onClickMenu: function (event) {
var me = this;
var flag = me.opts.flag;
me.applyDataAttributes();
if ($(event.target).is(me.opts.blockedElements)) {
return;
}
if (me.opts.preventDefault) {
event.preventDefault();
}
if (!flag) {
me.opts.flag = true;
setTimeout(function(){ me.opts.flag = false; }, 500);
me.$el.toggleClass(me.opts.activeCls);
}
if (me.opts.closeOnBody) {
event.stopPropagation();
$('body').on(me.getEventName('touchstart click'), $.proxy(me.onClickBody, me));
}
$.publish('plugin/swDropdownMenu/onClickMenu', [ me, event ]);
},
Heißt also, wir setzen beim ersten Ausführen einen Marker, den wir erst nach 0,5 Sekunden wieder zurück stellen um eine doppelte Ausführung des onClickMenu bzw. des dort enthaltenen toggleClass-Befehls zu verhindern. Onlienshop: Shopware 5.3.7.