Подтвердить что ты не робот

PhoneGap на iOS с абсолютными URL-адресами пути для активов?

Портирование веб-приложения в phoneGap на iOS, у нас есть URL-адреса активов (и ajax), которые являются абсолютными путями, например:

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

У нас есть каталог img, упакованный в каталог PhoneGap www. Изображение не будет загружаться с абсолютным путем, но только с относительным путем, например:

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

Может кто-нибудь объяснить, как URL-адрес префикса или переводится в этом контексте? То есть:.

<img src="/www/img/logo.png">

тоже не работает. Итак, что такое база URL, используемая PhoneGap для iOS?

Мы также попытались, например:

<img src="file://img/logo.png">
<img src="file:///img/logo.png">

но не идти.

Мы хотели бы избежать изменения URL-адресов на относительный для порта, так как абсолютные URL-адреса пути используются в CSS, Ajax-коде, устанавливаются Sprockets с бэкэндом Rails и т.д. Как мы можем просто получить PhoneGap/UIWebView на iOS для загрузки активов с использованием URL абсолютного пути, как написано?

Я вижу, что этот вопрос задается в разных формах здесь, в StackOverflow, но я еще не вижу правильного ответа.

4b9b3361

Ответ 1

Можно получить путь к приложению в JavaScript:

cordova.file.applicationDirectory

Поскольку я на Android, он говорит: "file:///android_asset/"... например:

var img_path = cordova.file.applicationDirectory + 'www/img/logo.png';

Таким образом, все ресурсы будут найдены при перекрестном строительстве для разных платформ.

Ответ 2

Произошло ли некоторое тестирование и, возможно, немного хакерства JavaScript, он может сделать его более управляемым. Это изменит все теги <a> и <img> с URL-адресом, начинающимся с/по отношению к текущему файлу.

Поместите это в файл и включите его с тегом <script> или введите его stringByEvaluatingJavaScriptFromString:

document.addEventListener("DOMContentLoaded", function() {
  var dummy = document.createElement("a");
  dummy.setAttribute("href", ".");
  var baseURL = dummy.href;
  var absRE = /^\/(.*)$/;

  var images = document.getElementsByTagName("img");
  for (var i =  0; i < images.length; i++) {
    var img = images[i];
    var groups = absRE.exec(img.getAttribute("src"));
    if (groups == null) {
      continue;
    }

    img.src = baseURL + groups[1];
  }

  var links = document.getElementsByTagName("a");
  for (var i =  0; i < links.length; i++) {
    var link = links[i];
    var groups = absRE.exec(link.getAttribute("href"));
    if (groups == null) {
      continue;
    }

    link.href = baseURL + groups[1];
  }
});

Ответ 3

При проверке абсолютного пути через ваш iPhone/iPad вы увидите что-то вроде этого:

<img src="file:///var/mobile/Applications/7D6D107B-D9DC-479B-9E22-4847F0CA0C40/YourApplication.app/www/logo.png" />

И это будет отличаться от устройств Android или Windows, поэтому я не думаю, что на самом деле неплохо ссылаться на активы, используя абсолютные пути в этом случае.

В качестве альтернативы вы можете рассмотреть возможность использования строк base64 в ваших файлах CSS:

div#overview
{
    background-image: url('data:image/jpeg;base64, <IMAGE_DATA>');
    background-repeat: no-repeat;
}