onpopstate не всегда срабатывает - PullRequest
0 голосов
/ 23 мая 2018

У меня есть 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 голосов
/ 01 июня 2018

Я отвечаю сам

Я нашел этот хак, чтобы всегда запускать функцию popstate.

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

спасибо в любом случае

...