SAP UI5 应用如何加载自定义 Theme

简介: SAP UI5 应用如何加载自定义 Theme

要加载外部自定义主题,开发人员可以通过在页面中静态声明或使用 Core.setThemeRoot() 方法来设置此主题。

这非常类似于对位于不同位置的 SAP UI5 库使用 registerModulePath()

下面是具体的操作步骤:


(1) 使用下面的代码告诉 SAP UI5 框架,我们自定义 theme 的地址。

sap.ui.getCore().setThemeRoot("my_theme", "http://url.to/the/root/dir");


SAPUI5 然后从该 URL 加载所有主题资源。 比如sap.ui.core库的 library.css文件,在上述代码执行之后,就变成:

http://url.to/the/root/dir/sap/ui/core/themes/my_theme/library.css

base directory 也可以通过 core.applyTheme(...) 方法的第二个参数指定。

如果 theme 的某些部分位于不同的位置,可以使用上面的调用来设置默认值,但通过在数组中将它们指定为第二个参数来覆盖特定库的主题位置:

sap.ui.getCore().setThemeRoot("my_theme", ["my.lib.one","my.lib.two"], "http://url.to/the/other/root/dir");


下面是不同的设置 theme 的实现方法:

(1) 在 SAPUI5 bootstrap script 的属性中使用与 JSON 字符串相同的对象结构:

<script id="sap-ui-bootstrap" 
  type="text/javascript"
  src="resources/sap-ui-core.js"
  data-sap-ui-theme-roots='{"my_theme" : "http://themes.org/ui5"}'>
</script>


(2) 通过 URL parameter 指定:

http://myserver.com/sap/myapp/?sap-ui-theme=my-theme@/sap/public/bc/themes/~client-111

(3) 通过全局配置对象指定。

将下列代码插入到 bootstrap 脚本之前:

<script type="text/javascript">
window["sap-ui-config"] = {
  themeRoots : {
    "my_preconfigured_theme" : "http://preconfig.com/ui5-themes",
    "my_second_preconfigured_theme" : {
      "" : "http://preconfig.com/ui5-themes",
      "sap.ui.core" : "http://core.com/ui5"
    }
  }
}
</script>


上面的代码达到的效果:

  • 从指定位置为所有库加载第一个主题。
  • 从指定位置为 sap.ui.core 库加载第二个主题。对于所有其他库,主题从默认位置加载。

通过 sap-ui-theme/sap-theme URL 参数配置带有 themeRoot URL 的主题时,存在一些出于安全方面考虑的限制。

默认情况下,与当前页面不同来源的绝对 URL 被禁止访问。路径段将相对于当前页面 origin 值进行解析。

根据 RFC 6454,为了允许通过 URL 参数使用某些 origin 来源,可以将 <meta> 标记添加到页面的 <head> 中:

<meta name="sap-allowedThemeOrigins" content="https://example.com">


有了上面的语句之后,我们就可以在 SAP UI5 url parameter 里,加载部署在另一个 url 上的 theme:

https://myserver.com/sap/myapp/?sap-theme=my_theme@https://example.com/custom-themes/


<meta> 标记中提供的来源必须包含与 URL 参数中提供的来源相同的协议、主机和端口。 多个允许的来源可以用逗号分隔。


通用通配符 * 也可用于允许所有来源。 然而,这应该只与其他安全机制结合使用,例如 CSP style-src 指令。不支持允许子域的通配符。

相关文章
|
18天前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
6天前
|
C# Android开发 开发者
Uno Platform 高级定制秘籍:深度解析与实践样式和模板应用,助你打造统一且高效的跨平台UI设计
【9月更文挑战第7天】Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 创建跨平台 UI 应用,覆盖 Windows、iOS、Android、macOS 和 WebAssembly。本文介绍 Uno Platform 中样式和模板的应用,助力开发者提升界面一致性与开发效率。样式定义控件外观,如颜色和字体;模板则详细定制控件布局。通过 XAML 定义样式和模板,并可在资源字典中全局应用或嵌套扩展。合理利用样式和模板能简化代码、保持设计一致性和提高维护性,帮助开发者构建美观高效的跨平台应用。
15 1
|
12天前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
25 0
|
12天前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
21 0
|
12天前
|
开发者 Android开发 UED
打造流畅应用:深入探索如何在Xamarin项目中选择并实现最佳UI/UX设计的实践指南
【8月更文挑战第31天】在数字化时代,UI/UX设计成为应用成功的关键。Xamarin以高效开发和强大兼容性著称,其设计理念“一次编写,处处运行”需充分适应多平台特性,提供一致体验。选择Xamarin.Forms或结合Xamarin.Native可实现跨平台UI设计;遵循各平台设计指南,保持布局一致性和简洁性;通过用户测试不断优化。最终,结合技术和用户需求,打造美观实用的应用,脱颖而出。
23 0
|
12天前
|
前端开发 开发者 C#
深度解析 Uno Platform 中的 MVVM 模式:从理论到实践的全方位指南,助你轻松掌握通过 C# 与 XAML 构建高效可维护的跨平台应用秘籍
【8月更文挑战第31天】本文详细介绍如何在优秀的跨平台 UI 框架 Uno Platform 中实施 MVVM(Model-View-ViewModel)模式,通过一个简单的待办事项列表应用演示其实现过程。MVVM 模式有助于分离视图层与业务逻辑层,提升代码组织性、易测性和可维护性。Uno Platform 的数据绑定机制使视图与模型间的同步变得高效简便。文章通过构造 `TodoListViewModel` 类及其相关视图,展示了如何解耦视图与模型,实现动态数据绑定及命令处理,从而提高代码质量和开发效率。通过这一模式,开发者能更轻松地构建复杂的跨平台应用。
22 0
|
2月前
|
IDE 程序员 开发工具
IDEA插件-Material Theme UI/IDEA最强主题插件/IDEA图标美化
"Material Theme UI" 是一个用于 JetBrains IDE(如 IntelliJ IDEA、WebStorm、Android Studio 等)的插件,它将原始外观改为 Material Design 风格,并提供丰富的选项来根据个人喜好配置 IDE。
464 0
IDEA插件-Material Theme UI/IDEA最强主题插件/IDEA图标美化
|
28天前
|
JavaScript 前端开发
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
19 0
|
29天前
数字化核心构建问题之SAP为应用软件扎根客户打基础如何解决
数字化核心构建问题之SAP为应用软件扎根客户打基础如何解决
13 0
|
2月前
|
JavaScript
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
vue + element UI 表单中内嵌自定义组件的表单校验触发方案
58 5