本地SAPUI5应用程序不再适用于1.54.xxx。它们可以正常使用1.52.xxx。
通过"本地SAPUI5应用程序"我的意思是申请:
这样的应用程序可以正常使用1.52.xxx:
src="https://openui5.hana.ondemand.com/1.52.11/resources/sap-ui-core.js"
但转储带有1.54.xxx的ui5loader-dbg.js错误:
src="https://openui5.hana.ondemand.com/1.54.4/resources/sap-ui-core.js"
在加载Components.js或控制器,来自两个程序的样本时发生错误:
ui5loader-dbg.js:882未捕获错误:无法加载' zprog / Component.js'来自./Component.js
ui5loader-dbg.js:882未捕获错误:无法加载' ztest2 / controller / App.controller.js'来自./controller/App.controller.js:0 -
您知道它的原因并且知道如何使用1.54运行本地SAPUI5应用程序吗?
答案 0 :(得分:2)
我认为主要原因是浏览器不支持本地文件(file://
)的异步XHR为mentioned in MDN:
如果您只是从本地文件运行示例,某些浏览器(包括Chrome)将不会运行异步请求(请参阅Fetching data from the server)。这是因为安全限制(有关网络安全的更多信息,请阅读Website security)。
随着UI5逐渐走向异步性(#UI5Evo)并且由于安全原因,应该避免使用 file://
协议开发应用程序。
相反,尝试设置本地HTTP服务器,其中包含许多工具,例如Web Server for Chrome。在服务器上运行应用程序还允许浏览器尊重CORS(无需关闭 web-security )。
尽管有framework not supporting the file://
协议,依赖unsupported and buggy command-line flag,忽略安全标准,并且不确定解决方法可能在将来是否仍有效,您仍然可以如果所有请求都是异步的,则使应用程序以1.54版运行。例如:
--disable-web-security --user-data-dir
--allow-file-access-from-files
在加载sap-ui-core.js
文件之前,请激活隐藏的实验标记xx-async
。
<script>
window["sap-ui-config"] = {
"xx-async": true
}
<script>
并像往常一样异步加载其他所有内容,例如在创建ComponentContainer或root view时提供async: true
。
就在昨天,有一个new commit更清楚地说明了升级到1.54后它为什么不起作用,以及为什么上面的解决方法必须在任何地方使用异步XHR。
使用1.54时,引入了new internal file ui5loader.js。除了它带来的许多很酷的功能之外,它还花费了大部分来自 jquery.sap.global.js 的代码来处理加载模块。在迁移时,必须针对使用旧版同步API的情况实施同步XHR的回退。这是通过function loadSyncXHR
实现的。
在loadSyncXHR
函数中,当返回的XHR状态为200
时,模块被视为已加载。但是,正如新提交建议的那样,某些浏览器(包括Chrome)会在从0
协议加载文件时返回状态file://
。该检查在昨天之前一直缺失,因此必须添加。
if ( xhr.status === 200 || xhr.status === 0)
如果您使用src="https://openui5nightly.hana.ondemand.com/..."
运行相同的项目而不更改代码,则不应再抛出错误。