dojoConfig中的CacheBust中断路径

CacheBust in dojoConfig breaks paths

本文关键字:路径 中断 CacheBust 中的 dojoConfig      更新时间:2023-09-26

我遇到了一年前ESRI论坛上有人报告的同样问题:查询字符串出现在文件名之前,就在最后一个斜杠之后,如下所示:

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

对我来说,这是一样的,除了我的cacheBust不破坏.png图像,但破坏manifest.json文件(但不是config.json)。似乎某个地方有一个支持的扩展名/文件名的开关,默认规则是"在最后一个斜杠后添加查询字符串"。在文件名后面添加查询字符串没有帮助-dojo在不应该出现的地方添加了另一个查询字符串。

如果这真的是由一个不敏感的白名单引起的,我需要找到并更改它。我检查了Web AppBuilder(1.4版),没有发现提到cacheBust。另一个可能的罪魁祸首是ArcGIS JavaScript API(在我的例子中是3.15)——它在其模糊的init.js中的第11行包含了对cacheBust的引用,但我没能跟踪查询字符串在URL中的位置。Dojo本身(1.10)中的错误似乎不太可能,但它似乎仍然是可能的。

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

我下载了API,看了一下它,意识到没有限制性的白名单。querystring被过早地分配给了稍后要添加文件名的基本URL。因此,解决方案是找到添加文件名的位置,并使该进程能够识别querystring。

因此,我找到了manifest.json的分配位置(在Web AppBuilder中,文件WidgetManager),并将其更改为处理querystring:

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篡改,但这种算法有效。

我对另一个答案中提到的代码进行了一些检查

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。

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

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

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