Ресурсы, загруженные с использованием модели навигации страниц jQuery Mobile на основе AJAX, имеют неверный URL - PullRequest
4 голосов
/ 17 марта 2011

Сводка:

При загрузке активов с использованием AJAX-модели jQuery Mobile для страниц отображается неверный URL.

Сценарий:

2 веб-сайта:

  • mydomain.com -> обычный сайт (здесь нет проблем, забудьте об этом)
  • mydomain.com / mobile -> мобильный сайт

Реализация:

Все мобильные страницы имеют чистый URL-адрес, например mydomain.com/mobile/page, т.е.: mydomain.com / mobile / home , mydomain.com / mobile / aboutus , mydomain.com / mobile / contact , ...

Таким образом, все мобильные страницы имеют в своей "голове" секциюбазовый URL-адрес, например

<base href="mydomain.com/mobile/" />

, чтобы все ресурсы работали с относительными (и чистыми) URL-адресами.

Что работает:

Когдадоступ к страницам с использованием полного URL-адреса или отключение модели навигации по страницам в jQuery Mobile ($.mobile.ajaxEnabled = false) - все (ссылки, ресурсы) работает как шарм.

Проблема:

Когда я неВ модели навигации по страницам jQuery Mobile первая открытая мобильная страница работает нормально, но после этого, когда я перехожу по ссылке на странице, новая страница загружается через Ajax и внедряется в DOM, но все ресурсы / ссылки с относительными(и очистить) URL перестают работать.У них неправильный URL.

Пример:

Когда я посещаю mydomain.com / mobile / aboutus" aboutus"имеет изображение логотипа с относительным URL logo.png (абсолютное значение будет mydomain.com / mobile / logo.png ), которое отображается правильно.Но когда я захожу на mydomain.com / mobile / home и нажимаю ссылку на mydomain.com / mobile / aboutus , страница " aboutus " загружаетсяно URL изображения логотипа изменяется на aboutlogo.png вместо правильного logo.png

Ссылка: http://jquerymobile.com/test/docs/pages/docs-navmodel.html

Другим ключевым компонентом модели навигации по страницам в jQuery Mobile является базовый элемент, который вставляется в заголовок и изменяется при каждом изменении страницы, чтобы гарантировать, что любые ресурсы (css, images, js и т. Д.), На которые есть ссылки на этомстраница будет запрашиваться по правильному пути.В браузерах, которые не поддерживают динамическое обновление базового элемента (например, Firefox 3.6), jQuery Mobile просматривает все ссылочные ресурсы на странице и префиксирует их атрибуты href и src с базовым путем.

Вопрос:

¿Я делаю это неправильно? ¿Это ошибка или я неправильно понял документацию ¿Как я могу получить ресурсы, загруженные через AJAX, чтобы иметь правильный URL-адрес?.

Я хочу использовать модель навигации по страницам в jQuery Mobile, чтобы иметь необычные переходы в мобильных браузерах.

Показать мне код!:

mydomain.com / mobile / home код:

<!DOCTYPE html>
<head>
    <base href="http://mydomain.com/mobile/" />
    <link rel="stylesheet" href="jquery.mobile-1.0a3.min.css">
    <script src="http://code.jquery.com/jquery-1.5.min.js"></script>
    <script src="jquery.mobile-1.0a3.min.js"></script>
    ...
</head>
<body>
    <div id="home" data-role="page">
        <div data-role="header">Foo</div><!--header -->

        <div data-role="content">
            <a href="about">About us</a>
        </div><!--content -->

        <div data-role="footer">Bar</div><!--footer -->
    </div><!--page -->
</body>
</html>

mydomain.com / mobile / about код:

<!DOCTYPE html>
<head>
    <base href="http://mydomain.com/mobile/" />
    <link rel="stylesheet" href="jquery.mobile-1.0a3.min.css">
    <script src="http://code.jquery.com/jquery-1.5.min.js"></script>
    <script src="jquery.mobile-1.0a3.min.js"></script>
    ...
</head>
<body>
    <div id="about" data-role="page">
        <div data-role="header">Foo</div><!--header -->

        <div data-role="content">
            <img src="logo.png" alt=""/><!--broken when loaded via AJAX-->
            <a href="home" data-role="button" data-rel="back">Back</a><!--broken when loaded via AJAX-->
        </div><!--content -->

        <div data-role="footer">Bar</div><!--footer -->
    </div><!--page -->
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 22 августа 2013

Создайте глобальную функцию на стороне сервера, которая принимает относительный актив в качестве аргумента и выводит полный путь к файлу. В PHP что-то вроде:

function abso($asset){
    return "http://ydomain.com/mobile/" . $asset;
}

Затем на своей странице jQuery Mobile вы можете написать:

<img src="<?= abso('mobile/logo.png');?>" alt=""/>

Если вы используете фреймворк, возможно, для вас уже есть функция. В CodeIgniter это site_url().

0 голосов
/ 02 мая 2011

У меня возникла та же проблема, и я думаю, что нашел решение

Я верю, что jQuery Mobile связывается с базовым URL, я нашел старую документацию, в которой говорится о ее "системе управления базовыми URL"

http://jquerymobile.com/demos/1.0a1/#docs/pages/docs-navmodel.html

Если вы используете URL-адреса, относящиеся к вашему корневому каталогу (с" / "в начале), все изображения загружаются правильно ..

в вашем случае использование следующего кода должно работать:

<img src="/mobile/logo.png" alt=""/>

я знаю, что было бы лучше иметь чистые относительные URL-адреса, но я не думаю, что jquery mobile их сейчас поддерживает

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...