我目前正在使用 Crosswalk 在本机 Android 应用程序中实现OpenLayers 。在我的资产文件夹中,我有我的 html/js 和 json(manifest) 文件。
我通过以下方式加载 OpenLayers 地图:
webview.loadAppFromManifest("file:///android_asset/map_home.json", null);
JSON 文件指向 html 文件,其中包含运行 OpenLayers 所需的 js 文件。我从丹麦地理数据机构 ( http://eng.gst.dk/ ) 运行一张特殊地图。当我使用标准 webview 时,地图无法在某些 Android 设备上加载。结果,我实现了 Crosswalk webview。
这给我带来了 CORS 的一些麻烦。首先,我在加载特殊地图时遇到错误。
I/chromium: [INFO:CONSOLE(425)] "Uncaught SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The cross-origin image at http://kortforsyningen.kms.dk/topo_geo?ticket=6015626e0d3b87b75358b1bf8c64d55a&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=TRUE&LAYERS=Vejnavn&STYLES=default&WIDTH=256&HEIGHT=256&CRS=EPSG%3A25832&BBOX=718835.2000000001%2C6176979.2%2C718886.4%2C6177030.4 may not be loaded.", source: file:///android_asset/ol.js (425)
我通过在 json 清单中添加 http/https 地址作为受信任的主机解决了这个问题:
{
"name": "map_home",
"start_url": "map_home.html",
"xwalk_hosts": [
"http://*/",
"https://*/"
]
}
如中所述:https ://crosswalk-project.org/documentation/manifest/xwalk_hosts.html
这使我能够在没有 CORS 错误的情况下加载地图。
接下来,我将向地图添加标记/特征。当我尝试为标记加载本地图像文件时,我的应用程序以崩溃/重启循环结束。我找到(并丢失了)一个链接,该链接建议使用内容提供程序访问本地文件。这似乎正在工作,但我再次收到 CORS 错误。
I/chromium: [INFO:CONSOLE(391)] "Uncaught SecurityError: Failed to execute 'texImage2D' on 'WebGLRenderingContext': The cross-origin image at content://dk.pernexus.markers/43.png may not be loaded.", source: file:///android_asset/ol.js (391)
我尝试将“content://*/”添加为“xwalk_hosts”,但仍然出现相同的错误。
{
"name": "map_home",
"start_url": "map_home.html",
"xwalk_hosts": [
"content://*/",
"http://*/",
"https://*/"
]
}
有没有办法允许“content://”或完全禁用 Crosswalk 的 CORS 检查?
在标准的 Android Webview 中,我能够启用以下设置:
webview.getSettings().setAllowUniversalAccessFromFileURLs(true);
Crosswalk 不存在此配置。
我正在使用以下版本:
- minSdkVersion 19 (Android 4.4)
- Crosswalk 15.44.384.13(也尝试了最新的测试版:17.46.448.3)
- OpenLayers 3.12.1
先感谢您。