我正试图从我的Angular应用程序重定向到非角度页面。如果我在$ scope上有一个重定向函数,并通过ng-click直接从UI元素调用它,它按预期工作。但是,如果我从另一个$ scope函数中调用该函数,页面将重新加载或保持原样。我怀疑这里有一个范围问题,但我不知道它是什么。我也尝试了$ window.location.assign()并得到了相同的结果。
为什么重定向工作单向,而不是另一个?谢谢!
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函数来执行重定向。这样做很好,因为它没有提交表格,但它也让我误以为这是一个范围问题。
答案 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或中呈现页面。通过确保其内容未嵌入其他网站,网站可以使用此功能来避免点击劫持攻击。