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

时间:2014-11-06 05:50:55

标签: javascript jquery html angularjs iframe

我正在使用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下载压缩档案时是否可以检测到事件?

2 个答案:

答案 0 :(得分:0)

由于浏览器限制,您无法通过AJAX下载文件吗?喜欢跨域问题?您可以通过检查Chrome控制台中的错误找到答案。

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

因此,可能发生的事情是你的iframe正在加载文件,试图在其中显示文件,但故意妨碍你查看其内容以确保安全。

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

答案 1 :(得分:0)

我最终没有尝试重置URL,只是将当前时间作为第二个参数附加,服务器会忽略该参数。现在看起来iframe正在重新加载新网址。

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