头图

SAP UI5 应用的标准 Theme 和自定义 Theme 的加载讨论

SAP UI5 应用的初始主题可以硬编码在应用程序中(在加载 SAPUI5 的引导程序的脚本标签中)或在加载 SAPUI5 之前定义的 JS 配置对象中,例如下面的例子:

<script id="sap-ui-bootstrap" 
    type="text/javascript"
    src="resources/sap-ui-core.js"
    data-sap-ui-theme="sap_belize">
</script>

这种硬编码的设置具有最低的优先级。

我们可以使用 url parameter,html?sap-ui-theme=sap_belize,来覆盖这个硬编码配置。

如果使用 UI 主题设计器来定义您自己的自定义主题,可以将自定义主题的位置作为服务器相对路径附加到 sap-ui-theme 参数,由 @ 符号分隔:http://myserver.com/sap/myapp/?sap-ui-theme=my-theme@/sap/public/bc/themes/~client-111

尽管可以指定完整的 URL,但该框架将仅使用 URL 的路径信息来防止基于 CSS 的攻击,否则可能会通过从恶意服务器引用 CSS 进行攻击。 在更复杂的情况下,例如,如果 UI 主题设计器的基础结构在单独的服务器上运行,则可以使用 Web dispatcher 将两个服务器组合在一个命名空间中,或者使用方法 sap.ui.getCore.applyTheme , 为自定义应用设置完整的 URL。

UI theme designer 的基础结构将多种技术的主题存储在同一位置,每个技术都在其自己的子目录中(UI5/ SAPUI5)。

其他 SAP 产品(如 SAP Enterprise Portal)仅将公共根 URL 附加到 sap-theme 参数。 因此,SAPUI5 将文件夹 UI5/ 附加到 sap-theme 参数中定义的任何给定路径。

可以使用方法 sap.ui.getCore.applyTheme 即时切换主题。

应用程序状态不会丢失,并且没有服务器 network 往返(加载 CSS 文件除外,如果未缓存到浏览器中)。

要加载外部自定义主题,可以通过在页面中静态声明或使用 Core.setThemeRoot() 方法来设置此主题。 这非常类似于对位于不同位置的库使用 registerModulePath()。

通过 sap-ui-theme/sap-theme URL 参数配置带有 themeRoot URL 的主题时,存在一些安全方面的限制。 默认情况下,与当前页面不同来源的绝对 URL 被 stripped off .

Path segment 将相对于当前页面的 origin 进行解析。


Jerry Wang的SAP技术专栏
SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使
914 声望
1.6k 粉丝
0 条评论
推荐阅读
线性表的顺序存储和链式存储
在计算机科学中,线性表是一种常见的数据结构,用于存储一组具有顺序关系的元素。线性表中的元素之间存在一对一的前驱和后继关系,每个元素都有唯一的前驱和后继(除了首元素和末元素)。线性表可以通过顺序存储...

JerryWang_汪子熙阅读 134

封面图
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...

wuwhs40阅读 4.9k评论 5

封面图
ESlint + Stylelint + VSCode自动格式化代码(2023)
安装插件 ESLint,然后 File -&gt; Preference-&gt; Settings(如果装了中文插件包应该是 文件 -&gt; 选项 -&gt; 设置),搜索 eslint,点击 Edit in setting.json

谭光志34阅读 20.9k评论 9

安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...

边城32阅读 7.4k评论 5

封面图
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco24阅读 2.3k评论 3

你可能不需要JS!CSS实现一个计时器
CSS现在可不仅仅只是改一个颜色这么简单,还可以做很多交互,比如做一个功能齐全的计时器?样式上并不复杂,主要是几个交互的地方数字时钟的变化开始、暂停操作重置操作如何仅使用 CSS 来实现这样的功能呢?一起...

XboxYan25阅读 1.8k评论 1

封面图
在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 2.1k

封面图
914 声望
1.6k 粉丝
宣传栏