将UI5资源升级到1.54后,本地引导SAPUI5应用程序会引发错误

时间:2018-05-08 09:02:50

标签: google-chrome sapui5 local development-environment

本地SAPUI5应用程序不再适用于1.54.xxx。它们可以正常使用1.52.xxx。

通过"本地SAPUI5应用程序"我的意思是申请:

  • 从没有http服务器的本地驱动器加载
  • 使用CDN
  • 使用浏览器禁用SOP之类的 Chrome浏览器使用 - disable-web-security --user-data-dir

这样的应用程序可以正常使用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应用程序吗?

1 个答案:

答案 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版运行。例如:

  • 给定:
    • Chrome的命令行标志
      • --disable-web-security --user-data-dir
      • --allow-file-access-from-files
    • UI5 sample application在等效的GitHub问题上提供
  • 在加载sap-ui-core.js文件之前,请激活隐藏的实验标记xx-async

    <script>
      window["sap-ui-config"] = {
        "xx-async": true
      }
    <script>
    
  • 并像往常一样异步加载其他所有内容,例如在创建ComponentContainerroot view时提供async: true

    Workaround working

更新(2018/05/10)

就在昨天,有一个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/..."运行相同的项目而不更改代码,则不应再抛出错误。