【问题标题】:javascript window.location issue with IE and FirefoxIE 和 Firefox 的 javascript window.location 问题
【发布时间】: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


【解决方案1】:

好的,我发现了这个问题,我知道如果没有完整的代码,几乎不可能解决这个问题。上面的代码有点简化,因此它没有解决问题。一旦 promise 被解决,函数 exitModule 就会被调用。调用如下所示:

正确

dataService.saveModule().then(exitModule);

我的代码如下所示,exitModule 后面的括号是错误的。与 Chrome 相比,我不太了解 FF/IE 的行为……但那是另一天的事了。

错误

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

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-10-07
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多