jQuery Mobile — Относительные ссылки — ошибка базового тега

#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-адреса для изображений…