Здравствуйте. В нашем проекте Ваш продукт используется для генерации веб-версии отчетов с последующим отображением их как в браузере, так и в других версиях приложения на разных девайсах (WPF-клиент на Windows-терминале, Android, iOS-клиенты на соответствующих устройствах). Проблема возникла в WPF-клиенте, который через контрол-браузер выводит сформированный отчет на экран. Отчет выводится как положено, однако кнопки тулбара (Print, Save, Zoom etc.) не активны, не реагируют на курсор мышки, а также на клик по ним.
Пытаясь разобраться в причинах проблемы, я установил соединение веб-контрола в WPF-клиенте с remote-инспектором в Chrom'e. Покопавшись в коде (очень симпатичный VanillaJS
), я выяснил что проблема заключается во флаге isTouchDevice в опциях объекта StiMvcViewer. При старте, объект определяет значение флага isTouchDevice с помощью проверки:
Код: Выделить всё
return 'ontouchstart' in document.documentElement
Любопытно, но эта проверка возвращала true, хотя такого события как ontouchstart я в инспекторе document.documentElement'a не увидел. И ладно бы если бы репорт просто реагировал на тач-события вместе с mouse-событиями, но флаг isTouchDevice используется для полной блокировки mouse-событий. То есть везде стоит проверка типа:
Код: Выделить всё
if (this.jsObject.options.isTouchDevice...) return;
В итоге элементы ни цвет не меняют при наведении на них мышкой, ни меню не показывают, ни клики не отрабатывают. Ради любопытства я пробовал подменять значение флага isTouchDevice в консоли после его определения - элементы стали подсвечиваться курсором, меню также стало вылезать, однако клики по элементам меню все равно ни к чему не приводили. Возможно, из-за каких-то еще проверок обработчики клик-ивентов просто не устанавливаются на элементы меню.
Интересно также и то, что подобная проблема у меня возникла в Chrome на одном из компьютеров. То есть тулбар ни на что не реагировал и все такое. Помогло полное отключение тач-поддержки с помощью флагов в Chrome - chrome://flags/#touch-events.
Собственно, вопрос заключается в следующем - как можно решить подобную проблему с определением тача и почему переключение репорта в тач-режим полностью отключает управление мышкой? Отключение тач-варианта с помощью установки флага StiInterfaceType.Mouse не поможет, так как на Android/iOS-устройствах нам по-прежнему потребуется тач-версия отчетов.
PS: для вывода отчета на WPF-клиенте мы используем продукт Awesomium, который основывается на движке Chromium.