ExtJs 6.2 classic не работает с Firefox и сенсорным экраном

ExtJs 6.2.0 не работает в Firefox, если экран сенсорный. Я заметил проблему с использованием классической версии фреймворка, я не могу сказать, затрагивается ли современная версия.

Это именно та проблема: если экран сенсорный, можно использовать приложение с жестами, но не с мышью. Щелчок мыши не запускает события щелчка.

На форуме Sencha есть упоминание об этой проблеме, но очень расстраивает то, что Sencha исправляет проблему для подписчиков, но не выпускает новую версию GPL. Существует также фрагмент кода, но мне не совсем понятно, как его использовать:

// Undo sencha's logic 
// Needed for top nav buttons to not open links in new tabs/windows when clicked in IE11 EXTJS-13775
// Firefox 52 is getting deteceted now as ALWAYS having pointer events
// chromeOS causing issues too
// unit tests failing
if (Ext.isIE || Ext.isEdge || (Ext.firefoxVersion >= 52) || Ext.os.is.ChromeOS || window.inUnitTest) {
    // sorry windows mobile phones...
    var eventMap = Ext.dom.Element.prototype.eventMap;
    eventMap.click = 'click';
    eventMap.dblclick = 'dblclick';
}

2 ответа

Решение

После некоторых проб и ошибок и сравнения console.logПосле того, как я начал использовать код, я предложил переопределение, которое исправляет ошибку.

/**
 * workaround for bug in ExtJs 6.2.0.
 * Resolved in current yet unreleased version
 */
Ext.define('Mb.override.dom.Element', {
    override: 'Ext.dom.Element'
},
function(){
    var additiveEvents = this.prototype.additiveEvents,
        eventMap = this.prototype.eventMap;
    if(Ext.supports.TouchEvents && Ext.firefoxVersion >= 52 && Ext.os.is.Desktop){
        eventMap['touchstart'] = 'mousedown';
        eventMap['touchmove'] = 'mousemove';
        eventMap['touchend'] = 'mouseup';
        eventMap['touchcancel'] = 'mouseup';
        eventMap['click'] = 'click';
        eventMap['dblclick'] = 'dblclick';
        additiveEvents['mousedown'] = 'mousedown';
        additiveEvents['mousemove'] = 'mousemove';
        additiveEvents['mouseup'] = 'mouseup';
        additiveEvents['touchstart'] = 'touchstart';
        additiveEvents['touchmove'] = 'touchmove';
        additiveEvents['touchend'] = 'touchend';
        additiveEvents['touchcancel'] = 'touchcancel';

        additiveEvents['pointerdown'] = 'mousedown';
        additiveEvents['pointermove'] = 'mousemove';
        additiveEvents['pointerup'] = 'mouseup';
        additiveEvents['pointercancel'] = 'mouseup';
    }
})

Я не проверял, работает ли каждая комбинация перевода событий. Линии, необходимые специально для click событие с помощью мыши с сенсорным экраном

eventMap['click'] = 'click';
eventMap['dblclick'] = 'dblclick';

Это известная проблема. Для получения дополнительной информации см. Примечание о совместимости нашего сайта: https://www.fxsitecompat.com/en-CA/docs/2016/touch-event-support-has-been-re-enabled-on-windows-desktop/

Другие вопросы по тегам