【发布时间】:2014-11-25 18:30:29
【问题描述】:
作为我的 Angular 应用程序的一部分,我在 IE 和 Firefox 中的 window.location 重定向有一些奇怪的行为。第一次调用 window.location = xyz 时,它在 IE/FF/Chrome 中运行良好。在应该去 google.com 的第二个电话中,Chrome 做了它应该做的事情,但 IE 和 FF 不做任何事情。在 IE Web 控制台中,我可以看到导航已触发,但我的窗口中的页面和 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);
}
};
【问题讨论】:
-
为什么是
$window.location而不是window.location? -
$window 只是 AngularJS 框架提供的窗口包装服务。
-
能否提供用于捕获事件的代码?
-
my code 在最新版本的 FF 和 IE 上正常工作。
-
我已经添加了捕获事件代码。不幸的是,它适用于您的示例。我的代码中似乎有些东西刚刚关闭,因为捕获事件的代码工作得很好,只是没有改变页面。我希望有人之前可能已经看到过这种行为(没有改变,但在刷新后会改变),并且可以为我指出可能干扰我的代码的正确方向。
标签: javascript window.location