如何解决SAP Web IDE Personal Edition中的跨源问题

时间:2016-10-18 06:28:49

标签: sapui5

我正在Web IDE Personal Edition中编写一个简单的应用程序,该应用程序将部署在On-Premise ABAP系统上。

App.view.xml

<mvc:View
  controllerName="databinding1.controller.App"
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc"
  displayBlock="true"
>
  <Button text="Submit"/>
  <Input
    value=""
    placeholder="Full Name"
    width="50%"
  />
</mvc:View>
  • 应用程序名称:DataBinding1
  • 应用程序存储在“工作区”文件夹中。

的index.html

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="utf-8">
    <title>Data Binding1</title>
    <script id="sap-ui-bootstrap"
      src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
      data-sap-ui-theme="sap_bluecrystal"
      data-sap-ui-libs="sap.m"
      data-sap-ui-bindingSyntax="complex"
      data-sap-ui-compatVersion="edge"
      data-sap-ui-preload="async"
      data-sap-ui-resourceroots='{
        "databinding1": "./"
      }'
    ></script>
    <script>
      sap.ui.getCore().attachInit(function () {
        new sap.ui.core.ComponentContainer({
          "name":"databinding1"
        }).placeAt("content");
      });
    </script>
  </head>
  <body class="sapUiBody" id="content"></body>
</html>

控制台中的错误消息:  enter image description here

如果我从App.view.xml中删除controllerName,则视图会成功加​​载。

2 个答案:

答案 0 :(得分:2)

您尝试使用sapui5页面提供的sdk,这是对另一台不在同一系统内的服务器的请求。错误是浏览器阻止跨站点脚本编写的典型行为。 您可以使用sapui5代理资源servlet为您的sap资源解决问题(也适用于odata,但这是另一个servlet =&gt;简单代理servlet)。

您应该设置资源servlet。在您的应用程序中,您必须区分是否应该使用代理,请查看链接:

https://sapui5.hana.ondemand.com/#docs/guide/2d3f5fb63a2f4090942375df80abc39f.html

存储在sap中的sapui5 sdk的远程路径:

http://<yourdomain>/sap/public/bc/ui5_ui5/resources/sap-ui-core.js

确保在TA:SICF中激活存储库 default_host>public>bc>ui5_ui5右键单击并按下激活

答案 1 :(得分:0)

对于那些在开发过程中实际想要处理跨源资源的人:Web IDE提供了一种代理机制,我们可以通过添加目标文件来利用它:

对于question作者:

  

error msg

该错误消息显示浏览器尝试加载名为 sap.ui.core.mvc.Controller.js 的文件,该文件不存在(404)。主要原因是 same-origin policy此处。

App.controller.js 中,您必须使用错误的语法添加依赖项。使用斜杠(.)作为API sap.ui.define awaits an array of module paths(而非模块名称),而不是点(/)。

sap.ui.define([
  "sap/ui/core/mvc/Controller" // instead of "sap.ui.core.mvc.Controller"
], function(Controller) {
  ...
});