2014-11-06 124 views
0

我正在使用AngularJS並在iframe上設置ngSrc,我使用它來下載壓縮存檔以避免無法使用AJAX下載文件。我使用一個指令來檢測iframe加載,我發現here,當你加載一個像「about:blank」這樣的URL時,它工作的很好,但是當我用RESTful調用它下載文件,即使它下載生成的文件。當通過iframe下載文件時檢測iframe加載

// 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

是否由於瀏覽器限制無法通過AJAX下載文件?像跨域問題一樣?您可以查看Chrome控制檯中的錯誤。

如果是這種情況,由於現代瀏覽器的限制,您將無法在iframe中查看文件的內容。想想如果允許開發者訪問任何iframe的內容會發生什麼。我可以在你的銀行網站的iframe中創建一個網站。登錄後,我將能夠從iframe中收聽表單提交事件,然後獲取您的登錄憑據。

因此,可能發生的情況是,您的iframe正在加載該文件,試圖在其中顯示該文件,但是故意阻止您查看其內容的安全性。

我建議通過您自己的代理服務器或通過雲服務下載文件,然後從您自己的服務器上提供文件。這可以避免跨域問題,因爲您現在可以ping自己的服務器。

+0

該壓縮文件實際上下載沒有問題,但我沒有辦法檢測是否它的iframe加載事件不會觸發。需要知道它何時下載,因此我可以將iframes url重置爲「about:blank」或其他,否則我無法根據需要下載該文件的第二個副本,需要首先將URL重置爲其他內容。 – mtpultz 2014-11-06 06:30:09

0

我最終沒有試圖每次都重置URL,只是將當前時間作爲第二個參數附加到服務器忽略的地方。現在看起來好像iframe正在重新加載一個新的URL。

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