Ладно, так что сегодня все в ярости, что сайт похож на этот:
- mysite.com /
- mysite.com / о
- mysite.com / контакт
Но тогда, если у пользователя включен Javascript, он должен просматривать эти страницы с помощью Ajax:
- mysite.com / # /
- mysite.com / # / о
- mysite.com / # / контакт
Это все хорошо. У меня все отлично работает.
Мой вопрос: если пользователь заходит на «mysite.com/about», я хочу автоматически перенаправить его на «mysite.com/#/about», если у него есть Javascript.
У меня это работает, так что если они попадут на "mysite.com/about", эта страница будет нормально загружаться сама по себе (без перенаправлений), а затем все клики после этой загрузки через ajax, но префрагментный URL не будет т изменить. например если они приходят на «mysite.com/about» и затем нажимают «контакт», новый URL будет «mysite.com/about#/contact». Мне правда это не нравится, это очень некрасиво.
Единственный способ, которым я могу придумать для автоматического перенаправления пользователя, прибывающего на «mysite.com/about» на «mysite.com/#/about», - это иметь некоторый javascript в заголовке, который выполняется ТОЛЬКО, если страница НЕ загружается через ajax. Этот код выглядит следующим образом ($ = jQuery):
$(function(){
if( !location.hash || location.hash.substr(1,1) != '/' ) {
location.replace( location.protocol+'//'+location.hostname+'/#'+location.pathname+location.search );
}
});
Это технически работает, но вызывает очень странное поведение. Например, обычно, когда вы «просматриваете исходный код» для страницы, которая имеет некоторое содержание AJAX, такого содержимого AJAX не будет в источнике, потому что вы просматриваете исходный источник страницы. Что ж, когда я просматриваю исходный код после такого перенаправления, то код, который я вижу, является ТОЛЬКО кодом, который был загружен через Ajax - я никогда раньше не видел ничего подобного. Это происходит как в Firefox 3.6, так и в Chrome 6.0. Я еще не проверял это с другими браузерами, но тот факт, что два браузера, использующие совершенно разные движки, демонстрируют одинаковое поведение, указывает на то, что я делаю что-то плохое (например, не просто ошибка в FF или Chrome).
Так что браузер почему-то считает, что страница, на которой я нахожусь, «является» страницей Ajax. Я могу продолжать просматривать, и это работает нормально, но если я, например, закройте Firefox и снова откройте его (и он снова откроет страницы, на которых я был), он перезагружает только фрагмент Ajax страницы, а не всю оболочку, пока я не выполню обновление вручную. (Chrome этого не делает, только Firefox). Я никогда не видел ничего подобного.
Я пытался использовать setTimeout, поэтому он не выполняет перенаправление до полной загрузки страницы, но происходит то же самое. В принципе, насколько я могу судить, это работает, только если фрагмент помещен туда в результате действия пользователя (щелчка), а не автоматически.
Итак, мой вопрос - как лучше всего автоматически перенаправить браузер с поддержкой Javascript с «обычного» URL на URL Ajax? У кого-нибудь есть опыт в этом? Я знаю, что есть сайты, которые делают это - например, http://rdio.com (музыкальный сайт). Там не бывает странностей, но я не могу понять, как они это делают.
Спасибо за любой совет.