Веб-сайт показывает ошибку JavaScript на iPad / iPhone под 3G, но не под WiFi

Соединение с http://www.manage-us.com на iPad под 3G [привыкший к] приводит к ошибке JavaScript, которая видна, если консоль разработчика была включена. Если к той же странице получают доступ с помощью того же iPad при соединении WiFi, никакая ошибка не отображена. [Ошибка теперь пошла, потому что я применил фиксацию ниже!].

Почему это?

Я попытался моделировать низкую пропускную способность (использующий dummynet) на Safari на Mac и на средстве моделирования iPad на Mac. Это не воспроизводит проблему.

Я в настоящее время подозреваю, что это - проблема, представляемая моим оператором мобильной связи в Великобритании (O2), который, как известно, изменяет некоторое содержание через кэш прокси-сервера, такой как понижение файлов изображений. Если можно подтвердить, что Вы не испытываете эту проблему при соединении 3G на iPad или iPhone через другого оператора мобильной связи, который был бы полезен.

24
задан sroebuck 22 July 2010 в 09:11
поделиться

1 ответ

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

34
ответ дан 28 November 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: