iOS上的PhoneGap具有资产的绝对路径URL?

tri*_*bes 25 url uiwebview ios sprockets cordova

将Web应用程序移植到iOS上的phoneGap,我们拥有绝对路径的资产(和ajax)URL,例如:

<img src="/img/logo.png">
Run Code Online (Sandbox Code Playgroud)

我们在PhoneGap的www目录下打包了img目录.图像不会使用绝对路径加载,而只会加载相对路径,例如:

<img src="img/logo.png">
Run Code Online (Sandbox Code Playgroud)

有人可以解释在这种情况下URL是如何被加前缀或翻译?即:

<img src="/www/img/logo.png">
Run Code Online (Sandbox Code Playgroud)

也不起作用.那么PhoneGap在iOS上使用的URL基础是什么?

我们也尝试过,例如:

<img src="file://img/logo.png">
<img src="file:///img/logo.png">
Run Code Online (Sandbox Code Playgroud)

但没有去.

我们希望避免将URL更改为相对于端口,因为绝对路径URL在整个CSS中使用,Ajax代码,由带有Rails后端的Sprockets设置,等等.我们如何才能在iOS上加载PhoneGap/UIWebView以加载使用写入的绝对路径URL的资产?

我在StackOverflow上看到这个问题在各种形式上有很多问题,但我还没有看到正确的答案.

Mar*_*ler 16

可以通过以下方式获取JavaScript中应用程序的路径:

cordova.file.applicationDirectory
Run Code Online (Sandbox Code Playgroud)

由于我在Android上,它说:"file:/// android_asset /"...例如:

var img_path = cordova.file.applicationDirectory + 'www/img/logo.png';
Run Code Online (Sandbox Code Playgroud)

像这样,在为各种平台进行交叉构建时,可以找到所有资源.

  • 工作和需要文件插件:https://www.npmjs.com/package/cordova-plugin-file (7认同)
  • 首先,请提及它需要https://www.npmjs.com/package/cordova-plugin-file (4认同)

Mat*_*man 7

一些测试和一些JavaScript hackery可以使它更易于管理.这将改变以/开头的URL的所有<a><img>标签相对于当前文件.

将它放入一个文件中,并将其与<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];
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 在这个阶段,因为它只是我们自己格式良好的HTML,构建管道中的一个简单的sed脚本就可以实现这个技巧,例如sed -e/href ="\ // href ="/ (2认同)

Mon*_*der 3

当通过 iPhone/iPad 检查绝对路径时,您会看到如下内容:

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

Android在不同的设备上它会有所不同Windows,所以我认为在这种情况下使用绝对路径引用资源实际上并不是一个好主意。

作为替代方案,您可以考虑使用base64CSS 文件中的字符串:

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

  • 谢谢。是否有 PG API 可以获取文档根目录的当前绝对路径?我们确实对某些图像使用数据网址,但这不是通用的解决方案。 (2认同)