Я исследовал это дальше и обнаружил, что проблема в том, что мобильный оператор Великобритании 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.