我在哪里放上WindBeforeUnload?

时间:2017-01-30 21:00:36

标签: javascript sapui5

我有一个SAP UI5应用程序,我想显示一个框,当用户试图通过我的应用程序外部的方法(点击链接,手动更改URL等)离开屏幕时,会出现一个框。

我看到有一个onWindowBeforeUnload()方法,但我不确定我在哪里放置此方法或如何调用它。我尝试将它包含在我想要功能的控制器中,但是当我离开时它不会被调用。如果有任何其他功能可以提供这种行为,那也没关系。

这是我在控制器中所做的事情:

onWindowBeforeUnload: function() {
    alert("you sure?");
},

我看到这是组件类的一种方法,但我认为这是在开始时创建的;我不太熟悉这个概念。

2 个答案:

答案 0 :(得分:1)

有几种不同的方法:

在正文标记

<body onbeforeunload='alert("no!!")'>

你的js代码中的

<script>
    window.onbeforeunload = function() {
      alert('no!!');
    }
</script>

请务必使用window.onbeforeunload而不是onWindowBeforeUnload

此外,请确保将代码放在页面的渲染输出中的标记内,或放在包含的javascript文件中。根据您的代码看起来,听起来您使用的是JavaScript库,这就是您使用functionName: function(){ //body }的原因。您不能使用该方法来覆盖window.onbeforeunload函数,因为您正在尝试处理窗口子节点内的函数。您必须使用顶级窗口节点并在那里处理该功能。您可以将此代码直接放在<script>标记或正文标记中。

答案 1 :(得分:1)

我不认为你可以直接从你的控制器覆盖它。您必须在窗口对象本身上覆盖它(根据@ matt-spinks&#39;回答上面的内容)或在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
        }
    });
});