【问题标题】:onpopstate isn't always triggeredonpopstate 并不总是被触发
【发布时间】:2018-05-23 14:07:05
【问题描述】:

我有一个 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;
        }
    }
}

【问题讨论】:

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


【解决方案1】:

我自己回复

我发现这个黑客总是触发popstate 函数。

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

还是谢谢

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多