2015-11-04 74 views
0

在我的項目中,我使用AngularJS創建了下載文件的指令。它包含以下內容:爲什麼下載tiff在Firefox中不起作用?

scope.$on('downloaded', function(event, data) { 
       var hiddenLink = document.createElement('a'); 

       $(hiddenLink).attr({ 
        href: 'data:application/tiff;base64,' + data.Attachment, 
        download: data.AttachmentFileName 
       }); 

       if (isIEorFirefox) { 
        $(hiddenLink).click(function(event){ 
         event.preventDefault(); 

         var byteString = atob(data.Attachment); 
         var buffer = new ArrayBuffer(byteString.length); 
         var intArray = new Uint8Array(buffer); 
         for (var i = 0; i < byteString.length; i++) { 
          intArray[i] = byteString.charCodeAt(i); 
         } 

         var blob = new Blob([buffer],{type:'image/tiff'}); 
         window.navigator.msSaveOrOpenBlob(blob, data.AttachmentFileName); 
        }); 
        $(hiddenLink).trigger('click'); 
       } else { 
        hiddenLink.click(); 
       } 
      }); 

以前有一個問題 - 下載IE中根本就沒有開始 - 但現在,你可以把它已被淘汰。雖然另一個問題仍然存在 - 目前這段代碼不會在Firefox中開始下載。只有一個問題 - 爲什麼?

UPDATE:

,因爲它沒有在IE中正確保存文件我已經更新初始代碼。現在確實如此。在網上搜索我仍然無法找到一種方法來在FF中進行文件下載。此外FF根據這篇文章https://hacks.mozilla.org/2012/07/why-no-filesystem-api-in-firefox/似乎還沒有任何本地的方式來保存文件。如果有人證明我錯了,我將不勝感激。

回答

0
hiddenLink.click(); 

也許應該是:

$(hiddenLink).click(); 

或同其他:

$(hiddenLink).trigger('click'); 

假設你還需要事件處理程序添加,以及...

+0

嗯,這一個 - hiddenLink.click(); - 利用原生的JS點擊事件,並在Chrome,IE和Opera中正常工作。 – Nervosa

+0

可能是一個版本問題,firefox 5或更高版本,以前沒有。 「在Gecko 5.0之前,Gecko沒有在其他可能會響應鼠標點擊的元素(如鏈接(元素))上實施點擊方法,也不一定會觸發其他元素的點擊事件。」 https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click –

相關問題