У меня запущен jQuery на мобильном веб-сайте, который выполняет некоторые расчеты макета и изменяет размеры нескольких элементов.
Это работало нормально на поддерживаемых нами браузерах - даже на Nokia - но затем я получил сообщения о проблемах с Nokia.
Затем я понял, что системное ПО моего E72 было последнимОбновлен в конце прошлого года, поэтому мы скачали самую новую версию.И теперь ошибка есть.
Пройдя обычный процесс отладки JS, добавив оповещения в функцию, я обнаружил, что если я вызову оповещение в функции, которая выполняет все вычисления макета и изменяет размеры, тооно работает!Если я опускаю предупреждение, ничего не происходит.
В прошлом у меня случалось нечто похожее на то, что происходило в IE, когда IE по какой-то причине требовалась JS-пауза, чтобы он наверстывал упущенное.Обычный трюк состоял в том, чтобы использовать функцию (функции), с которой у меня возникли проблемы, при setTimeout
, установленном на 0.
Я пробовал это на Nokia, но не повезло.Затем я попробовал 1 секунду, 10 секунд, но все же, не повезло.Только предупреждение заставит его работать.
Есть ли какие-нибудь теории на этот счет?Есть ли что-то, что делает предупреждение JS с точки зрения синхронизации функций JS, которые потенциально могут быть реплицированы с чем-то иным, чем предупреждение или setTimeout
?
ОБНОВЛЕНИЕ:
Для запроса, пример кода,Это внутри функции, которая вызывается из готового документа.
var extraWidths = $icon.width() + $button.width() + 20 + 5;
var containerWidth = $panel.width();
var percentWidth = 100 - ( Math.floor((extraWidths/containerWidth)*100) );
$searchInput.css('width',percentWidth+'%');
alert('hello world'); // if I add this, Nokia works correctly.
Что я делаю, так это то, что после рендеринга документа я вычисляю ширину некоторых элементов, вычитая ее из общей ширины родительского контейнера, а затем корректирую поле ввода внутри него.занять оставшееся место (установить в процентах ширины).
Это прекрасно работает в Webkit, Firefox, BlackBerry (OS5 и OS6), поэтому я не думаю, что это ошибка кода, но надеюсь, что кто-то нашел обходной путь (кроме предупреждения).
ОБНОВЛЕНИЕ 2:
После дополнительных исследований у меня появилась новая теория: веб-браузер Nokia неправильно уведомляет jQuery о том, что документ готов.
Я обнаружил, что упаковка jQueryэто требует вычисления размеров элементов DOM, работает только тогда, когда я обертываю его внутри setTimeout.И это не произвольная задержка ... Мне нужно убедиться, что задержка больше, чем время, необходимое браузеру для правильной визуализации DOM.Так как я не могу знать, что данные скорости устройства и скорости сети, я должен придерживаться раз в 1-2 секунды, что не собирается его сокращать.
Итак, мой новый вопрос: кто-нибудьзнаете о каких-либо проблемах с jQuery document ready
, и он не работает должным образом на устройствах Nokia?Если это так, то, к сожалению, нам нужно переосмыслить использование jQuery.