使用$ window.location.href在Angular中重定向可以直接调用,但如果从另一个函数调用则不行

时间:2015-03-06 20:33:48

标签: javascript .net angularjs

我正试图从我的Angular应用程序重定向到非角度页面。如果我在$ scope上有一个重定向函数,并通过ng-click直接从UI元素调用它,它按预期工作。但是,如果我从另一个$ scope函数中调用该函数,页面将重新加载或保持原样。我怀疑这里有一个范围问题,但我不知道它是什么。我也尝试了$ window.location.assign()并得到了相同的结果。

为什么重定向工作单向,而不是另一个?谢谢!

Link to CodePen

JS

angular.module('myApp',[]);

angular.module('myApp').controller('myCtrl', [ '$scope', '$window', function($scope, $window){
  $scope.destination = "http://www.clientsfromhell.net";
  $scope.redirectStarted = false;

  $scope.redirect = function(target){
    $window.location.href = target;
    $scope.redirectStarted = true;
  };

  $scope.wrapperFunction = function() {
    var altDestination = "http://www.reddit.com/r/CrappyDesign";
    $scope.redirect(altDestination);
  };
}]);

HTML

<div data-ng-app="myApp" data-ng-controller="myCtrl">
  <ul>
    <li>Invoke redirect() directly: <input type="button" value="Direct Invocation" data-ng-click="redirect(destination)" /></li>
    <li>Invoke from wrapper function: <input type="button" value="From Wrapper" data-ng-click="wrapperFunction()" /></li>
  </ul>
  <div data-ng-show="redirectStarted">
    Redirect started
  </div>
</div>

更新

dfsq是对的,我的问题与Angular无关。我的应用程序是一个.NET应用程序,主页面上有一个表单。因为我使用的是type = submit的按钮,所以表单正在提交,除非你对它执行了preventDefault(),否则会取消重定向。在我的调试中,我在header元素上使用ng-click函数来执行重定向。这样做很好,因为它没有提交表格,但它也让我误以为这是一个范围问题。

1 个答案:

答案 0 :(得分:0)

这与Angular无关。包装器重定向不起作用的原因是它使用了不同的重定向URL(在reddit域上)。此资源具有受限制的内容策略,阻止其在不同域页面上的iframe中显示。

Сorresponding错误:

  

拒绝在一个框架中显示“http://www.reddit.com/r/CrappyDesign”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。

第一个目标网址没有此限制,因此可以完美运行。

有关X-Frame-Options的文档:

  

X-Frame-Options HTTP响应标头可用于指示是否允许浏览器在a或中呈现页面。通过确保其内容未嵌入其他网站,网站可以使用此功能来避免点击劫持攻击。