jQuery .show() и BlackBerry OS5
Это, вероятно, длинный выстрел, но...
Кто-нибудь сталкивался с проблемой, используя jQuery show () в веб-браузере BlackBerry OS5 и вызывая его неработоспособность (на устройстве) или сбой телефона (симулятор)? Если звук, нашли обходной путь?
То же самое происходит, используем ли мы.show () или.css('display','block')
Работает в OS6, iOS, Firefox, Chrome и т. Д. И т. Д., Но умирает в браузере OS5.
О, я должен добавить:
Из того, что мы можем сказать, это только проблема при запуске нашего приложения наших реальных серверов (JSF, websphere). Когда мы тестируем jQuery локально как статическую страницу, он работает нормально.
2 ответа
Моя команда на работе также использует jQuery Mobile и столкнулась с похожими проблемами на устройствах (хотя я не думаю, что мы видели сбой симулятора из-за этого). Вот что мы нашли до сих пор:
Ваш звонок в
show()
может работать, но обрабатываться так медленно, что вы сдаетесь перед загрузкой. Весь DOM для веб-страницы обрабатывается каждый раз, когда вы добавляете, удаляете или изменяете какой-либо атрибут или элемент на странице. В сообщении на форумах BlackBerry предлагается удалить элемент перед его изменением для повышения производительности.На некоторых устройствах мы обнаружили, что вызов
show()
будет работать, но пользовательский интерфейс обновляется только после прокрутки вверх или вниз по странице. Если ваша страница слишком коротка для прокрутки, вам может не повезти.onclick
атрибут, кажется, игнорируется на сенсорных экранах (но отлично работает на устройствах с трекболом / сенсорной панелью), и может быть, поэтому вашshow()
результаты звонков бездействуют. Чтобы наши гиперссылки работали на всех устройствах, мы размещаем вызовы JavaScript в обоихonclick
а такжеhref
атрибуты:<a href="javascript:showThings();" onclick="javascript:showThings();">Show</a>
При вызове JavaScript из
onclick
метод, мы должны были предшествовать вызов метода сjavascript:
вот так:<a href="#" onclick="javascript:showThings();">Show</a>
(Большинство современных браузеров предполагают, что вашonclick
значение должно оцениваться как JavaScript)Навигация на основе фокуса не включена по умолчанию, что вызывает проблемы при использовании устройств с трекболом / тачпадом (экран блокируется и перестает реагировать на нажатия клавиш). Вы можете включить навигацию на основе фокуса в любом из ваших проектов
config.xml
или с помощью специфического для RIM атрибута гиперссылки. Я забыл, с какой проблемой мы столкнулись после включения этого вconfig.xml
, но в итоге мы пошли сx-blackberry-initialFocus
атрибут гиперссылки вместо.
Трудно сказать точно, какой из вышеперечисленных пунктов может относиться к вашей ситуации, надеюсь, что-то уместно или полезно. До сих пор моя команда не впечатлила опыт веб-разработки на BlackBerry, особенно различия между OS 5 и 6, а также между трекболом / тачпадом и сенсорными устройствами.
Проблема, которую мы обнаружили, заключается в том, что в браузере OS5 просто возникают проблемы с обновлением DOM при изменении свойств дисплея с BLOCK на NONE. Представитель BlackBerry даже сказал нам, что нужно просто избегать обновления DOM в OS5 (тьфу!).
Таким образом, решение, которое мы в итоге выбрали, заключалось в том, чтобы не использовать .show()
а также .hide()
скорее мы переключили имя класса. Каждое устройство, кроме OS5, будет иметь имя класса, переключающее свойство отображения, OS5, однако, будет переключать высоту с auto
в 0px
Это сделало OS5 счастливым.
Все это говорит о том, что это все еще не объясняет некоторые переменные... например, что мы можем запустить код локально как статическую страницу и просто запустить его в симуляторе. Но точно такой же код вылетел бы, если бы мы попытались загрузить страницу с нашего сервера.
Мы также можем использовать.show() в другом месте приложения без проблем.
В конце концов, я считаю, что это определенная комбинация CSS, примененная к родительским элементам, которая убивает браузер, если некоторые из его дочерних элементов имеют свои display
переключены.