我在哪里放上WindBeforeUnload?

问题描述 投票:0回答:2

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

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

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

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

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

javascript sapui5
2个回答
1
投票

我认为你不能直接从你的控制器覆盖它。你要么必须在窗口对象本身上覆盖它(根据上面的@ 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
        }
    });
});

1
投票

有几种不同的方法:

在身体标签

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

在你的js代码中:

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

一定要使用window.onbeforeunload而不是onWindowBeforeUnload

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

© www.soinside.com 2019 - 2024. All rights reserved.