在运行时寻址 UI5 模块时如何检测 `eval` 调用?

问题描述 投票:0回答:1

作为 FLP 中启用“异步模块加载”准备工作的一部分,其先决条件之一是确保不会由于使用响应标头

eval
及其响应头提供 HTML 文档而触发
Content-Security-Policy
调用。指令
script-src
省略
unsafe-eval

UI5 中是否有一个功能可以记录运行时由错误寻址模块触发的所有

eval
调用?

sapui5 content-security-policy amd sap-fiori
1个回答
1
投票

分辨率

  1. 打开浏览器控制台 (F12) 并确保“警告”日志可见。
  2. 使用 UI5 配置 URL 参数
    sap-ui-xx-debugModuleLoading=true
    启动应用程序,并确保没有不必要地启用调试模式。
  3. 在浏览器控制台中,按“(使用 eval)”进行过滤。

示例

给定

sap.ui.define([
  "sap/ui/core/mvc/Controller",
  "sap/ui/comp/library",
], (Controller, sapUiCompLib) => {
  // ...
  const ValueHelpRangeOperation = sapUiCompLib.valuehelpdialog.ValueHelpRangeOperation; // enum from module "sap/ui/comp/library"
  const ValueHelpDialog = sapUiCompLib.valuehelpdialog.ValueHelpDialog; // control from module "sap/ui/comp/valuehelpdialog/ValueHelpDialog"
  return Controller.extend("my.controller.MyController", {
    onSomething: function () {
      const vhDialog = new ValueHelpDialog(/*...*/);
      sap.ushell.Container/*...*/;
      // ...
    },
    // ...
  });
});

日志

解决方案

将缺少的依赖项声明为

"sap/ui/comp/valuehelpdialog/ValueHelpDialog"

无需声明也已记录的传递依赖项 (
 : ...
)。

sap.ui.define([
  "sap/ui/core/mvc/Controller",
  "sap/ui/comp/library",
  "sap/ui/comp/valuehelpdialog/ValueHelpDialog" // <-- Declare the module dependency
], (Controller, sapUiCompLib, ValueHelpDialog) => {
  // ...
  const ValueHelpRangeOperation = sapUiCompLib.valuehelpdialog.ValueHelpRangeOperation; // enum from module "sap/ui/comp/library"
  // const ValueHelpDialog = sapUiCompLib.valuehelpdialog.ValueHelpDialog; <-- Remove
  return Controller.extend("my.controller.MyController", {
    onSomething: function () {
      const vhDialog = new ValueHelpDialog(/*...*/);
      sap.ui.require([
        "sap/ushell/Container"
      ], Container => Container/*...*/);
      // ...
    },
    // ...
  });
});

声明为依赖的模块名称可以在UI5 API参考中看到:


其他指南可以在 UI5 文档主题开发人员最佳实践中找到。

© www.soinside.com 2019 - 2024. All rights reserved.