#jquery #ajax #mobile #base
#jquery #ajax #Мобильный #База
Вопрос:
В моем приложении я использую базовый тег <base href="http://localhost/app/" />
, а ссылки используют относительный путь, например: <a href="news/page-1">some link</a>
.
Первая страница загружается как шарм, но следующие запросы пытаются загрузить неправильные URL-адреса, проверенные firebug.
Пример:
База: http://localhost/app/
- ссылка 1: новости
- ссылка 2: о
при первом запросе по ссылке 1 получите правильный URL, http://localhost/app/news
.
но при следующем запросе, если я нажму на ссылку 2, jquery mobile попытается загрузить следующий URL: http://localhost/app/news/about
как бороться с этой проблемой?
использовать абсолютные URL-адреса не вариант.
Спасибо.
Ответ №1:
Похоже на ошибку.
И здесь может быть исправление для этого.
Github — Исправление проблемы 613 — Jquery Mobile игнорирует исходный ‘базовый’ тег
Ответ №2:
Мне удалось исправить относительные ссылки, используя сам jQuery, поместив этот скрипт внизу каждой страницы:
<script type="text/javascript"><!--
var base = $( 'base' ).attr( 'href' );
if( base ) {
// Fix a tags with relative href
$( 'a[href]' ).filter( function() {
return ! /^(w :|/)/.test($(this).attr('href'));
}).each( function() {
$(this).attr( 'href' , base $(this).attr( 'href' ) );
});
}
//--></script>
В основном он выполняет следующее:
- Проверьте, есть ли базовый тег, и в этом случае:
- Выберите каждый тег ‘a’, имеющий атрибут ‘href’
- Отфильтруйте теги, href которых является абсолютным URL (начиная с ‘scheme:’ или ‘/’)
- Добавьте базовый тег к href, сделав его абсолютным
Для меня это сработало довольно хорошо.
Обратите внимание, что он работает только с базовыми hrefs, заканчивающимися косой чертой (например, 'http://localhost/app/'
). В противном случае потребуется выполнить дополнительную обрезку для базовой переменной.
Я все еще пытаюсь понять, как сделать то же самое с источниками изображений. Попытка того же метода завершается неудачей, так как кажется img
, что URL- src
адреса ошибочно преобразуются в абсолютные, прежде чем я смогу исправить их с помощью jQuery. Если кто-нибудь найдет уловку, дайте мне знать. Между тем, я буду использовать абсолютные URL-адреса для изображений…