我有一个SAP UI5应用程序,我想显示一个框,当用户试图通过我的应用程序之外的方法(点击链接,手动更改URL等)离开屏幕时出现。
我看到有一个onWindowBeforeUnload()
方法,但我不知道我把这个方法放在哪里或如何调用它。我尝试将它包含在我想要功能的控制器中,但是当我离开时它不会被调用。如果有任何其他功能可以提供这种行为,那也没关系。
这是我在控制器中所做的事情:
onWindowBeforeUnload: function() {
alert("you sure?");
},
我看到这是组件类的一种方法,但我认为这是在一开始就创建的;我不太熟悉这个概念。
我认为你不能直接从你的控制器覆盖它。你要么必须在窗口对象本身上覆盖它(根据上面的@ matt-spinks'回答),要么在Component.js文件上覆盖它(如果你使用的话)。
以下是如何在Component.js文件中执行此操作:
sap.ui.define(["sap/ui/core/UIComponent"], function (UIComponent) {
"use strict";
return UIComponent.extend("company.main.Component", {
// ...
// ...
/**
* Fired before the window closes or moved to another URL
*/
onWindowBeforeUnload: function(oEvent) {
// your code
},
/**
* Fired when the window is closed.
*/
onWindowUnload: function(oEvent) {
// your code
}
});
});
有几种不同的方法:
在身体标签
<body onbeforeunload='alert("no!!")'>
在你的js代码中:
<script>
window.onbeforeunload = function() {
alert('no!!');
}
</script>
一定要使用window.onbeforeunload
而不是onWindowBeforeUnload
。
此外,请确保将代码放在页面的渲染输出中的标记内,或放在包含的javascript文件中。根据你的代码看起来,听起来你使用的是一个javascript库,这就是你使用functionName: function(){ //body }
的原因。您不能使用该方法来覆盖window.onbeforeunload
函数,因为您正在尝试处理窗口的子节点内的函数。您必须使用顶级窗口节点并在那里处理该功能。您可以通过将此代码直接放在<script>
标记或body标记中来实现。