我在Eclipse中创建了一些已部署到SAP NetWeaver PO 7.5 Application Server的SAPUI5 Web应用程序。
所有这些应用程序都在“通用”项目中使用通用组件。我只是通过index.html
中的标题使用此bootstrapping脚本标记在特定应用程序中使它们可用:
<!-- Bootstrapping UI5 -->
<script id="sap-ui-bootstrap"
src="/sapui5/resources/sap-ui-cachebuster/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-theme="path.to.custom.theme"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"com.namespace.ui.specificapp": ".", "com.namespace.ui.common" :"/com.namespace~ui~common~web"}'
data-sap-ui-frameOptions="trusted"
data-sap-ui-appCacheBuster = "./,/com.namespace~ui~common~web/" >
</script>
一切正常。但今天的挑战是将这些应用程序转移到SAP Cloud。我现在所做的是将项目(包括公共项目)导入WebIDE。我发现的第一件事是data-sap-ui-resourceroots
属性不再起作用,因为应用程序无法从公共项目中找到组件。所以我将公共应用程序部署到SAP Cloud并在index.html的bootstrapping script-tag中插入相应的URL,如下所示:
<script id="sap-ui-bootstrap"
src="/sapui5/resources/sap-ui-cachebuster/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-theme="path.to.custom.theme"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"com.namespace.ui.specificapp": ".", "com.namespace.ui.common" :"/https://common-aXXXXXXXX.dispatcher.hana.ondemand.com/"}'
data-sap-ui-frameOptions="trusted"
data-sap-ui-appCacheBuster = "./,/com.namespace~ui~common~web/" >
这是让浏览器从常见项目中找到通用组件的JS文件,但是会引发以下错误:
注意:您的浏览器不支持JavaScript或已关闭。按按钮继续。
这是由https://common-aXXXXXXXX.dispatcher.hana.ondemand.com/主机回复的。当我分析HTTP请求时,我看到它设置了参数Accept:text/plain, */*; q=0.01
。我不知道为什么SAPUI5请求纯文本或我可以更改此行为的位置。有谁知道如何将此应用程序结构转移到SAP Cloud?
答案 0 :(得分:1)
答案很简单:服务器阻止对其他来源的请求以防止CSRF攻击。在本地解决方案中,所有源文件都来自同一个来源:自己的服务器。在SAP Cloud中,每个应用程序都是独立部署的,具有自己的URL。因此,浏览器不接受来自其他项目的JavaScript文件。访问这些文件的解决方案是将公共项目的URL添加到SAP Cloud Cockpit中的目标。
仅供参考:在detinations中包含URL使您可以使用相对URL来引用外部JavaScript文件,以便浏览器不会阻止它们。