Javascript 通过iframe下载文件时检测iframe加载

Javascript 通过iframe下载文件时检测iframe加载,javascript,jquery,html,angularjs,iframe,Javascript,Jquery,Html,Angularjs,Iframe,我使用AngularJS并在iframe上设置ngSrc,我使用它下载压缩的归档文件,以避免无法使用AJAX下载文件。我正在使用一个指令来检测我发现的iframe加载,当加载一个类似about:blank的URL时效果很好,但是当我用RESTful调用来下载文件时,它没有加载,即使它下载生成的文件 // Markup of iframe using ngSrc and custom directive <iframe ng-src="{{url}}" style="display:none

我使用AngularJS并在iframe上设置ngSrc,我使用它下载压缩的归档文件,以避免无法使用AJAX下载文件。我正在使用一个指令来检测我发现的iframe加载,当加载一个类似about:blank的URL时效果很好,但是当我用RESTful调用来下载文件时,它没有加载,即使它下载生成的文件

// Markup of iframe using ngSrc and custom directive
<iframe ng-src="{{url}}" style="display:none;" iframe-onload="myCallback" />

// Controller setting iFrame, what I'd like to trigger the load
$scope.downloadArchive = function( id ) { // no load event? but downloads zip archive

    var url = '/data/archive/instance/' + id;
    $scope.url = $sce.trustAsResourceUrl( url );
}

// Controller setting iFrame, what does trigger the load
$scope.downloadArchive = function( id ) { // load event triggered

    $scope.url = $sce.trustAsResourceUrl('about:blank');
}

通过iframe下载压缩存档文件时是否可能检测到事件?

是否由于浏览器限制而无法通过AJAX下载文件?比如跨域问题?您可以通过检查Chrome控制台中的错误来找到答案

如果是这种情况,您将无法在iframe中查看文件的内容,这也是由于现代浏览器的限制。想想如果允许开发人员访问任何iframe的内容会发生什么。我可以在一个iframe中用你们银行的网站创建一个网站。一旦您登录,我就可以从iframe中侦听表单提交事件,然后获取您的登录凭据

因此,可能发生的情况是,您的iframe正在加载文件,试图在其中显示文件,但为了安全起见故意阻止您查看其内容


我建议您通过自己的代理服务器或云服务下载该文件,然后从自己的服务器上提供该文件。这避免了跨域问题,因为您现在可以ping自己的服务器。

我没有每次尝试重置URL,只是将当前时间附加为第二个参数,服务器会忽略该参数。现在,iframe似乎正在重新加载一个新的URL

var url = '/data/archive/instance/' + id + '/' + Date.now();

zip文件实际上下载没有问题,但我无法检测是否有问题,iframe加载事件不会触发。需要知道它何时下载,以便我可以将iframes url重置为about:blank或other,否则我无法下载文件的第二个副本(如果需要),需要先将url重置为其他内容。