IE 和 Firefox 的 javascript window.location 问题
Posted
技术标签:
【中文标题】IE 和 Firefox 的 javascript window.location 问题【英文标题】:javascript window.location issue with IE and Firefox 【发布时间】: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 上正常工作。
我已经添加了捕获事件代码。不幸的是,它适用于您的示例。我的代码中似乎有些东西刚刚关闭,因为捕获事件的代码工作得很好,只是没有改变页面。我希望有人之前可能已经看到过这种行为(没有改变,但在刷新后会改变),并且可以为我指出可能干扰我的代码的正确方向。
【参考方案1】:
好的,我发现了这个问题,我知道如果没有完整的代码,几乎不可能解决这个问题。上面的代码有点简化,因此它没有解决问题。一旦 promise 被解决,函数 exitModule 就会被调用。调用如下所示:
正确
dataService.saveModule().then(exitModule);
我的代码如下所示,exitModule 后面的括号是错误的。与 Chrome 相比,我不太了解 FF/IE 的行为……但那是另一天的事了。
错误
dataService.saveModule().then(exitModule());
【讨论】:
以上是关于IE 和 Firefox 的 javascript window.location 问题的主要内容,如果未能解决你的问题,请参考以下文章
IE 和 Firefox 的 javascript window.location 问题
JavaScript 读取 IE 和 FireFox 中的单选按钮值
JavaScript 时钟适用于 Chrome,但不适用于 Firefox 或 IE