我们正在开发一个 SAP UI5 业务应用,操作人员从订单列表进入订单详情,又从详情进入编辑页面。表单已经修改了一半,此时浏览器左上角的 back button 被点击,页面返回到详情页,尚未提交的数据随之消失。面对这种情况,最直接的想法往往是让 SAP UI5 禁用浏览器的 back button,等保存完成后再恢复。从工程结论看,普通的 SAP UI5 应用不能真正禁用浏览器自带的 back button,也不能清空浏览器已经建立的会话历史。SAP UI5 可以控制应用产生什么样的历史记录,可以判断当前导航大致是在前进还是后退,可以响应 URL hash 的变化,也可以控制应用页面上的返回按钮,但这些能力都不等于关闭浏览器的原生返回功能。这里需要先把三个经常混在一起的概念分开。一个是 Chrome、Edge、Firefox、Safari 工具栏上的浏览器返回按钮,也包括鼠标侧键、触控板返回手势、Android 系统返回键以及快捷键 Alt 加左方向键。它们驱动的是浏览器的 session history。一个是 SAP UI5 应用自己放在页面标题栏里的返回按钮,例如sap.m.Page的导航按钮,或者sap.f.FlexibleColumnLayout场景中的内部导航按钮。这个按钮完全由应用事件处理函数控制。另一个是 SAP Fiori Launchpad Shell Bar 中的返回箭头。它属于 Launchpad 外壳,不是业务应用 DOM 中的普通按钮,也不是浏览器工具栏上的按钮。三者在视觉上都表现为返回,控制权却处在不同层级。浏览器返回按钮为什么不能被 SAP UI5 禁用,需要从浏览器的