我正在使用AngularJS并在iframe上设置ngSrc,我用它来下载压缩存档以避免使用AJAX下载文件。我使用了一个指令来检测我找到的here的iframe负载,当你加载像" about:blank"这样的网址时,这种方法效果很好,但它并没有当我用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下载压缩档案时是否可以检测到事件?
答案 0 :(得分:0)
由于浏览器限制,您无法通过AJAX下载文件吗?喜欢跨域问题?您可以通过检查Chrome控制台中的错误找到答案。
如果是这种情况,由于现代浏览器限制,您将无法在iframe中查看文件的内容。想一想如果允许开发人员访问任何iframe的内容会发生什么。我可以用你的银行网站在iframe上创建一个网站。登录后,我将能够从iframe收听表单提交事件,然后获取您的登录凭据。
因此,可能发生的事情是你的iframe正在加载文件,试图在其中显示文件,但故意妨碍你查看其内容以确保安全。
我建议您通过您拥有的代理服务器或通过云服务下载文件,然后从您自己的服务器提供文件。这可以避免跨域问题,因为您现在可以ping自己的服务器。
答案 1 :(得分:0)
我最终没有尝试重置URL,只是将当前时间作为第二个参数附加,服务器会忽略该参数。现在看起来iframe正在重新加载新网址。
var url = '/data/archive/instance/' + id + '/' + Date.now();