Проблема с javascript window.location в IE и Firefox

У меня какое-то странное поведение при перенаправлении window.location в IE и Firefox как часть моего углового приложения. При вызове window.location = xyz в первый раз он отлично работает в IE/FF/Chrome. При втором вызове, который должен идти на google.com, Chrome делает то, что должен, но IE и FF ничего не делают. В веб-консоли IE я вижу, что навигация запущена, но страница и URL-адрес не изменились в моем окне. Теперь, если я нажму F5 на этой странице, он перейдет на страницу, на которую он должен, даже если URL-адрес вверху не указывает туда (как в IE, так и в FF).

Кто-нибудь когда-нибудь сталкивался с этой проблемой и знает, как ее решить? Я пробовал все версии перенаправления (window.location, window.location.href, windows.location.assign(), window.location.replace(), а также угловой сервис $window) безуспешно.

Первый вызов, вызванный нажатием кнопки (отлично работает во всех браузерах):

$scope.pressButton = function() {
  var url = 'xyz/index.html';
  $window.location = url;
};

Второй вызов, вызванный нажатием клавиши (работает только в Chrome):

function exitModule() {
  $window.location = 'http://www.google.com';
  console.log('window.location'); // still pointing to the old page
}

Обновление кода, вызывающего функцию exitModule():

Примечание. Приложение создано с помощью angularjs. Функция exitModule() вызывается во всех браузерах, это просто перенаправление, которого нет в IE/FF.

HTML:

<body ng-app="myModule" ng-controller="MainCtrl" ng-keydown="keyPress($event);">

JS:

// Handle global key press
$scope.keyPress = function(event){
  if(event.which === 27) { // EscapeKey
    exitModule();
  } else {
    $scope.$broadcast('keyPress', event);
  }
}; 

person jimmy    schedule 01.10.2014    source источник
comment
почему $window.location вместо window.location?   -  person im_brian_d    schedule 01.10.2014
comment
$window — это просто служба-оболочка вокруг окна, предоставляемая фреймворком AngularJS.   -  person jimmy    schedule 01.10.2014
comment
не могли бы вы предоставить код, используемый для захвата событий?   -  person rhgb    schedule 01.10.2014
comment
мой код корректно работает в последних версиях FF и IE.   -  person rhgb    schedule 01.10.2014
comment
Я добавил код события захвата. К сожалению, это работает в вашем примере. Кажется, что-то не так в моем коде, так как код для захвата события работает просто отлично, просто не меняет страницу. Я надеялся, что кто-то, возможно, видел это поведение раньше (не менялось, а менялось после обновления) и мог указать мне правильное направление того, что может мешать моему коду.   -  person jimmy    schedule 01.10.2014


Ответы (1)


Хорошо, я нашел проблему, и я знаю, что было почти невозможно понять это, не имея полного кода. Приведенный выше код был немного упрощен, поэтому в нем не было проблемы. Функция exitModule вызывается, как только обещание разрешено. Вызов выглядит так:

Верно

dataService.saveModule().then(exitModule);

Мой код был показан ниже со скобками после exitModule, что неверно. Хотя я не совсем понимаю поведение FF/IE по сравнению с Chrome... но это для другого дня.

Неправильно

dataService.saveModule().then(exitModule());
person jimmy    schedule 01.10.2014