在AngularJS中设置window.location或window.open会给出;“访问被拒绝”;在IE 11中

在AngularJS中设置window.location或window.open会给出;“访问被拒绝”;在IE 11中,angularjs,internet-explorer,internet-explorer-11,Angularjs,Internet Explorer,Internet Explorer 11,我承认是AngularJS的新手,但我不明白为什么这段代码在Chrome和Firefox中有效,但在IE 11的javascript控制台中给出了“访问被拒绝” 我需要通过经过身份验证的REST调用显示PDF。理想情况下,这将显示在弹出式(预览)窗口中 到目前为止,代码如下所示: $http.post( url, payload, { headers : { "Authorization": token }, responseType: "arraybu

我承认是AngularJS的新手,但我不明白为什么这段代码在Chrome和Firefox中有效,但在IE 11的javascript控制台中给出了
“访问被拒绝”

我需要通过经过身份验证的REST调用显示PDF。理想情况下,这将显示在弹出式(预览)窗口中

到目前为止,代码如下所示:

$http.post( url, payload, {
    headers : {
        "Authorization": token
    }, 
    responseType: "arraybuffer"
}).success(function ( data ) {
    var file = new Blob( [ data ], { type: 'application/pdf' });
    var fileURL = URL.createObjectURL( file );
    window.open( fileURL );
}
window.open()
为IE11提供了
“访问被拒绝”
消息,但在Chrome和Firefox中也可以使用。我尝试更改为
window.location()
,但得到了相同的错误

这不是跨域问题(所有内容都在同一个foo.net域中)。

它看起来像IE阻止了Blob上的window.open,但实现了它们自己的打开和保存Blob的功能。相反,尝试

if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveOrOpenBlob(blob);
}
else {
    var objectUrl = URL.createObjectURL(blob);
    window.open(objectUrl);
}

最简单的方法是不返回文件,而是返回文件的url,然后在新窗口中打开它。要在Angular中打开窗口,请使用$window(将其注入控制器),Ie对本地文件使用不同的语法。用法:window.navigator.msSaveBlob(blob,'file.txt');或者window.navigator.msSaveOrOpenBlob(blob,'file.txt');See为我解决了我发布的问题