Javascript Safari 10.0.1$window.open in.然后$http.get的返回未定义
在MacOS Sierra上的safari上下载pdf文档时出现问题。我们从服务器获取数据URL,然后使用$window.open和createObjectURL将文件推送到浏览器。但这一切其实并不重要。但这里有一个片段来重现我的问题:Javascript Safari 10.0.1$window.open in.然后$http.get的返回未定义,javascript,angularjs,google-chrome,safari,Javascript,Angularjs,Google Chrome,Safari,在MacOS Sierra上的safari上下载pdf文档时出现问题。我们从服务器获取数据URL,然后使用$window.open和createObjectURL将文件推送到浏览器。但这一切其实并不重要。但这里有一个片段来重现我的问题: myApp.controller('MyCtrl', function($scope, $window, $http) { $scope.open = function() { var windowy = $window.o
myApp.controller('MyCtrl', function($scope, $window, $http) {
$scope.open = function() {
var windowy = $window.open('', '_blank');
console.log('1');
console.log(windowy);
$http.get('http://httpbin.org/delay/0').then(function(response) {
var windowx = $window.open('', '_blank');
console.log('2');
console.log(windowx);
});
}
});
我创建了一个JSFIDLE来说明问题,url是:
这是chrome(mac)的日志
这是safari 10(mac)的日志
为什么safari上的窗口在$http.get(…)中没有定义。然后(…)我们以务实的方式解决了我们的问题,也许不是最优雅的解决方案,但现在它可以解决问题
myApp.controller('MyCtrl', function($scope, $window, $http) {
$scope.open = function() {
var window = $window.open('', '_blank');
$http.get('http://httpbin.org/delay/0').then(function(response) {
console.log(window);
}, function() {
window.close();
});
}
});
弹出窗口拦截器。为什么第一个window.open没有被阻止?因为您可能执行了单击操作…没有。ajax调用是异步的,因此它没有附加到单击事件。延迟是将其与单击事件分离的部分。如果将它放在setTimeout中,同样的事情也会发生。为什么要使用Ajax调用?使用您正在进行Ajax调用的url设置弹出窗口,并设置适当的标题以强制下载。