dojoConfig中的CacheBust会中断路径

时间:2016-05-06 08:04:37

标签: javascript dojo arcgis-js-api

我有同样的问题someone reported a year ago on ESRI forum:查询字符串出现在文件名之前,就在最后一个斜杠之后,如下所示:

http://js.arcgis.com/3.13/esri/images/symbol/sfs/?1430314495556diagonalcross.png

对我而言,除了我的cacheBust没有中断{​​{1}}图片,但.png个文件(但不是manifest.json)之外,它是相同的。似乎某处是支持扩展/文件名的切换,使用"在最后一个斜杠之后添加查询字符串"规则作为默认值。在文件名后没有帮助的情况下添加查询字符串 - dojo添加了另一个查询字符串,它应该不存在。

如果这确实是由不明确的白名单引起的,我需要找到并更改它。我检查了Web AppBuilder(版本1.4),没有发现config.json。另一个可能的罪魁祸首是ArcGIS JavaScript API(在我的情况下为3.15) - 它在其模糊init.js的第11行包含cacheBust的引用,但我没有设法跟踪其中的位置查询字符串放在URL中。在Dojo本身(1.10)中出现的错误似乎不太可能,但似乎仍有可能。

有没有可用的解决方案?使用下载的API代码是可以的。如果没有,任何人都可以帮我找到代码中的正确位置,或者反驳问题是否存在?

2 个答案:

答案 0 :(得分:0)

我下载了API,稍微查看了一下,并意识到没有限制性白名单。查询字符串过早地分配给稍后添加文件名的基本URL。因此,解决方案是找到添加文件名的位置,并使此过程具有查询字符串。

所以我找到了manifest.json的分配位置(在Web AppBuilder中,文件WidgetManager)并将其更改为处理查询字符串:

if (widgetJson.folderUrl.indexOf("?") > -1) {
    url = widgetJson.folderUrl.substr(0, widgetJson.folderUrl.indexOf("?")) + 'manifest.json' + widgetJson.folderUrl.substr(widgetJson.folderUrl.indexOf("?"));
} else {
    //this is how it looked before
    url = widgetJson.folderUrl + 'manifest.json';
}

代码可能稍微优雅,但它有效。 cacheBust还有一些其他文件出现乱码,但此算法有效。

答案 1 :(得分:0)

我在另一个答案中提到了一些检查代码:

if (widgetJson.folderUrl.indexOf("?") > -1) {
    url = widgetJson.folderUrl.substr(0, widgetJson.folderUrl.indexOf("?")) + 'manifest.json' + widgetJson.folderUrl.substr(widgetJson.folderUrl.indexOf("?"));
} else {
    //this is how it looked before
    url = widgetJson.folderUrl + 'manifest.json';
}

我不推荐这种做法。我正在使用v2.3。

确定要使用的网址的代码在产品的3d和2d部分中有所不同。此代码仅修复了manifest.json文件的url问题。它不能解决图标文件(或可能是其他文件类型)的相同问题。

此外,当您更改Web appbuilder应用程序代码时,它会被复制到您创建的每个新应用程序中。相反,如果您已经创建了一个应用程序,则必须根据现有应用程序再次进行更改。每个新出现的文件类型问题都会导致每个Web Appbuilder产品安装以及使用它构建的每个应用程序再修复一次。 Esri的每次新升级都可能需要重新进行完全相同的更改。

我建议在Esri修复底层代码问题而不是尝试修补此问题之前不要将CacheBust设置为true。