Соединение с http://www.manage-us.com на iPad под 3G [привыкший к] приводит к ошибке JavaScript, которая видна, если консоль разработчика была включена. Если к той же странице получают доступ с помощью того же iPad при соединении WiFi, никакая ошибка не отображена. [Ошибка теперь пошла, потому что я применил фиксацию ниже!].
Почему это?
Я попытался моделировать низкую пропускную способность (использующий dummynet) на Safari на Mac и на средстве моделирования iPad на Mac. Это не воспроизводит проблему.
Я в настоящее время подозреваю, что это - проблема, представляемая моим оператором мобильной связи в Великобритании (O2), который, как известно, изменяет некоторое содержание через кэш прокси-сервера, такой как понижение файлов изображений. Если можно подтвердить, что Вы не испытываете эту проблему при соединении 3G на iPad или iPhone через другого оператора мобильной связи, который был бы полезен.
Я изучил этот вопрос и обнаружил, что проблема заключается в том, что британский оператор мобильной связи O2 (первоначальный эксклюзивный оператор iPhone для Apple) изменяет веб-контент перед отправкой на iPhone и iPad. Возможно, перед отправкой на любое устройство с мобильным браузером.
Они недетерминированно встраивают некоторые CSS и JavaScript в основные исходные файлы веб-страниц. Это может создавать ошибки либо из-за ошибок в их алгоритме, либо как следствие удаления белого пространства из исходных файлов с синтаксическими ошибками в исходных файлах, которые в остальном были доброкачественными.
Эти модификации также удаляют сообщения об авторских правах из защищенных авторским правом библиотек javascript и библиотек css и вносят хаос в оптимизацию доставки.
Например, представьте, что пользователь посещает последовательность страниц вашего сайта, которые все ссылаются на библиотеки jQuery. Вместо того чтобы позволить мобильному браузеру локально кэшировать библиотеку, O2 вставляет ее в строку на каждой странице, заставляя телефон загружать всю библиотеку снова и снова для каждой страницы.
Я написал блог об этой проблеме здесь в надежде привлечь к ней больше внимания: http://stuartroebuck.blogspot.com/2010/07/mobile-proxy-cache-content-modification.html
Мой обходной путь заключается в использовании document.write()
для вставки зависимостей библиотеки JavaScript во время загрузки и предотвращения вставки их в O2. Кажется, это работает довольно хорошо. например:
<script type="text/javascript">
// <![CDATA[
// Using document.write to load JavaScript dependencies to bypass O2 network inlining of JavaScript.
function loadJS(file){document.write("<" + "script type='text/javascript' src='" + file + "'></" + "script>")}
loadJS("/js/jquery-1.4.2.min.js");
loadJS("/js/myJSLibrary.js");
// ]]>
</script>
Обратите внимание, что, как всегда, document.write()
не будет работать, если страница обслуживается как XHTML.