onpopstate并不总是被触发

时间:2018-05-23 14:07:06

标签: javascript angular javascript-events frontend browser-history

我有一个 angular 项目,我试图捕捉后退按钮事件,以触发我自己的功能。

我使用onpopstate,来自window js )和platformLocation angular ),以及功能并不总是被触发。

我有一个重定向到我的页面的登录,我可以通过两种方式传递。

  • 作为新用户,在我的应用中的注册表单中。在这种情况下,功能被触发
  • 使用现有帐户访问任何页面。在这种情况下,功能永远不会起作用。事实上,如果我进入注册页面,它既不起作用。

我也尝试使用window.onbeforeunload,并且总是执行它,但是当我尝试重定向到另一个页面(我想做的事情)并阻止默认导航时,无法正常工作。

关于发生了什么的一些想法?

感谢您的帮助

修改

这是我服务中的主要代码。

服务代码

@Injectable()
export class BackService {

    constructor(
        private _platformLocation: PlatformLocation
    ) {
        vm.setBackEvent();
    }

    /**
     * NAvigation from browser
     */
    setBackEvent() {
        const vm = this;
        // JS ** this trigger the function but dont navigate
        // window.onbeforeunload = function (e) {
        //     console.log('onbbeforeunload');
        //     location.href = url;
        //     return ;
        // };

        // JS  ** this doesnt work always
        // window.onpopstate = (e) => {
        //     console.log('window onpopstate');
        //     location.href = url;
        // }


        // Angular ** his doesnt work always
        this._platformLocation.onPopState = (e: LocationChangeListener) => {
             console.log('PlatformLocation onpopstate');
             location.href = url;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我回应自己

我发现这个黑客总是触发popstate功能。

window.onpopstate = function (e) {
   // ... Some code ... 
}
history.pushState({}, ''); // this makes the function always works

非常感谢