从存储中加载 .pbf 导致 CORS 错误

Loading a .pbf from storage results in CORS error

我在 Vue.js 应用程序中使用 Mapbox GL JS 来呈现 (.vector).pbf 文件。现在,使用我们的内部 API 从 mbtiles 文件中获取图块可以很好地渲染和使用图块,但是数据也应该可以离线访问。所以我做了一个方法来从 mbtiles 文件中获取 pbf 文件并将它们压缩在一起以在设备上解压缩。 (立即打包 mbtiles 文件是不可行的,因为它只有不到 1 GB 的大小,并不是所有的东西都需要,所以我们正在提取我们需要的东西。)

这就是我的 'issue' 的用武之地。使用以下结构会导致 CORS 错误,即使它是从本地存储加载的也是如此:

tilesUrl = "file://" + this.$root.local + "tiles/{z}/{y}/{x}.vector.pbf"

url 是有道理的,看起来像这样:

file:///storage/emulated/0/Android/data/com.someCompany.someApp/files/active/tiles/{z}/{y}/{x}.vector.pbf

然而,当我构建它并尝试通过我们正在使用的网络视图 运行 它时,它不断抛出有关 CORS 的错误。但是,我们正在做同样的事情来加载图像、视频和 json。然而,只有在 pbf 文件上它才会抛出 CORS 错误。为什么?

CORS 错误将占上风,即使 header 在请求中也是如此,因为响应是它想要 header 的结果。由于它无法通过 file:// 方案应用 header,因此它不会接受从本地存储加载的任何内容。解决方法是在设备本身上托管一个简单的 HTTP 服务器,例如 AndroidAsync