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 问题

总结IE和Firefox的Javascript兼容性总结

JavaScript 读取 IE 和 FireFox 中的单选按钮值

JavaScript 时钟适用于 Chrome,但不适用于 Firefox 或 IE

在 Firefox 上开发的 Javascript 在 IE 上失败的典型原因是啥? [关闭]

如何让 Firefox 中的 javascript 也能在 IE 中运行