Когда пользователь загружает мою страницу в первый раз на iPhone (отлично работает на Android, IE, FF, Opera, Chrome, Safari), две части страницы сгенерированный вызовом Prototype/Scriptaculous Ajax.Updater, искажены - они выглядят так, как будто двоичный файл был введен на страницу или карта символов была скремблирована. Если пользователь затем перезагружает страницу или использует вкладки страницы для навигации по запросам Ajax.Updater, все будет хорошо. Это первый раз, когда страница загружается в сеансе браузера, когда это происходит. Вот соответствующие вызовы с немного контекста:Выход Ajax.Updater искажен только при первой загрузке iPhone
soundManager.onready(function(){
new Ajax.Updater('PlayerSet', 'http://' + location.host +
playerHTMLloc, {method: 'post', onComplete: startPlayer});
});
Это называется только один раз за посещение сайта (так что пользователь должен перезагрузить, чтобы получить его, чтобы правильно отобразить). Он вызывает скрипт python, который записывает html в stdout.
Вот другой:
show: function(elm) {
var id = elm.identify();
elm.addClassName(id.sub('-html', '-selected'));
var link = 'ajax/' + id.sub('-', '.');
$('centercontent').update('<div id="floaterForSpinner"></div><div
id="centerSpinner"><img src="images/ajax-loader.gif"></div>');
new Ajax.Updater('centercontent', link, {evalScripts: 'true',
method: 'post'});
}
Это является частью небольшого класса, который обрабатывает вкладки на этой странице. Опять же, только первый раз show() вызывается, возникает ошибка. После этого tabber работает нормально. Обновитель просто вытаскивает html текстовые файлы с сервера.
Проблема возникает как с Prototype/Scripty 1.6.1/1.8.3, так и с 1.7/1.9.0.
Заголовки отправления и приема идентичны для первой и последующих нагрузок, а допустимая кодировка - Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
во всех случаях для каждого Firebug.
У меня нет iPhone сам, и ни один из синглов iPhone или онлайн-игр я не пытался воспроизвести проблему, поэтому тестирование этого будет кошмаром. Следовательно, все, что можно было бы сделать, чтобы помочь, было бы очень полезным.
UPDATE на основе вопросов, которые я получил в списке прототипа GG:
Все выше код вызывается после DOM загружен:
document.observe('dom:loaded', function() {
Ajax.Responders.register({onCreate: removeListeners});
Ajax.Responders.register({onComplete: postAJAX});
new Lightbox();
initMailList();
AT = new AjaxTabber('tablist');
initInternalLinkListener();
initIE6msgClose();
$('PlayerSet').update('<div style="text-align:center">
<img src="images/ajax-loader.gif"></div>');
soundManager.onready(function(){
new Ajax.Updater('PlayerSet', 'http://' + location.host +
playerHTMLloc, {method: 'post', onComplete: startPlayer});
});
});
AjaxTabber вкладка класс, который содержит шоу(), о которой я упоминал ранее. Функция document.observe выше находится в последнем js-файле в заголовке.
UPDATE # 2:
Замена
document.observe('dom:loaded', function() {
с
Event.observe(window, 'load', function() {
в 3-м блоке кода фиксирует искаженные нагрузки. Однако в решении возникли новые вопросы/вопросы:
- Зачем загружать всю страницу для правильной работы для загрузки Ajax.Updater? Загрузка DOM должна быть все, что необходимо. Нет никакой причины требовать, чтобы изображения, загруженные для работы ajax, работали.
- Моя общая производительность страницы теперь существенно ухудшилась, чтобы исправить проблему iPhone. Я бы очень хотел вернуться к загрузке после завершения загрузки DOM.
Привет, Уолтер, спасибо за ответ. К сожалению, вопрос составляет почти 2 года, и веб-страница, о которой идет речь, давно ушла, поэтому я не могу проверить ваше предложение. – elhefe
Спасибо, у меня была небольшая ладонь, когда я смотрел на дату. – Walter