2014-10-01 90 views
1

我的window.location有一些奇怪的行爲,在IE和Firefox中重定向,作爲我的角度應用程序的一部分。當調用window.location = xyz時,它第一次在IE/FF/Chrome中正常工作。在第二個應該去google.com的電話會議上,Chrome會做它應該做的事情,但IE和FF不會做任何事情。在IE web控制檯中,我可以看到導航已被觸發,但頁面和URL並未在我的窗口中更改。現在,如果我在此頁面上按F5,它將轉到它應該訪問的頁面,即使頂部的URL沒有指向那裏(在IE和FF中)。IE和Firefox的javascript window.location問題

有沒有人遇到這個問題,並知道如何解決它?我試過所有版本的重定向(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); 
    } 
}; 
+0

爲什麼'$ window.location',而不是'window.location'? – 2014-10-01 01:11:08

+0

$ window只是AngularJS框架提供的一個包裝窗口服務。 – jimmy 2014-10-01 01:14:25

+0

你能否提供用於捕獲事件的代碼? – rhgb 2014-10-01 01:31:08

回答

0

好吧,我發現這個問題,我知道,這是幾乎不可能想出解決辦法,而不必提供完整的代碼。上面的代碼稍微簡化了一點,因此錯過了這個問題。一旦解決了承諾,函數exitModule就會被調用。調用看起來是這樣的:

正確

dataService.saveModule().then(exitModule); 

我的代碼是與exitModule後括號中這是錯誤如下圖所示。雖然......我不太瞭解FF/IE與Chrome相比的行爲,但那是另一天。

錯誤

dataService.saveModule().then(exitModule());