2013-12-12 29 views
9

鑑於此代碼(從別人):斑點URL在Internet Explorer中angularjs

var module = angular.module('myApp', []); 

module.controller('MyCtrl', function ($scope){ 
    $scope.json = JSON.stringify({a:1, b:2}); 
}); 

module.directive('myDownload', function ($compile) { 
    return { 
     restrict:'E', 
     scope:{ data: '=' }, 
     link:function (scope, elm, attrs) { 
      function getUrl(){ 
       return URL.createObjectURL(new Blob([JSON.stringify(scope.data)], {type: "application/json"})); 
      } 

      elm.append($compile(
        '<a class="btn" download="backup.json"' + 
        'href="' + getUrl() + '">' + 
        'Download' + 
        '</a>' 
      )(scope));      

      scope.$watch(scope.data, function(){ 
       elm.children()[0].href = getUrl(); 
      }); 
     } 
    }; 
}); 

The fiddle example工作正常鉻下載。但點擊「下載」鏈接在IE11中什麼都不做。沒有錯誤,沒有警告,沒有任何反應。

但根據this它支持IE10和11

是否有需要改變或正在發生的事情有些IE安全設置?

+0

IE不支持所有blob mime類型,你是否試圖使它只是純文本,看看是否可行? – joseeight

+0

我有同樣的問題,我用'text/plain'試過了,沒有用。有趣的是,我可以右鍵單擊,將目標另存爲,然後運行。 – bhamlin

回答

13

找到了解決方案。首先,IE處理BLOB儲蓄不同,特別是它採用:

window.navigator.msSaveOrOpenBlob(new Blob([element], {type:"text/plain"}), "filename.txt");` 

如果你看一下this page的源代碼,你會看到他們是如何做到這一點。

但是爲了使這個工作與跨瀏覽器的支持是一個痛苦..一天結束,你會最終結束with FileSaver.js

..這是我最終使用,並像魅力的作品。

+2

我可以順應這個作品。如果條件爲IE/ROW,則具有以下條件: '// IE 10/11 if(window.navigator.msSaveOrOpenBlob){ window.navigator.msSaveOrOpenBlob(blob,fileName); } else { ...' – vanthome

+0

很好找。我正想着看着瀏覽器比較圖表,讓自己變得瘋狂。 – Casey

0

使用FileSaver.js!如此容易使用。

對於發送作爲二進制響應PDF:

// In HTML, first include filesaver.js with <script src="/scripts/filesaver.js"></script> 

var thisPDFfileName = 'my.pdf'; 
var fileData = new Blob([response], { type: 'application/pdf' }); 

// Cross-browser using FileSaver.js 
saveAs(fileData, thisPDFfileName); 

對於NPM版本:

var fileSaver = require('file-saver'); 

var thisPDFfileName = 'my.pdf'; 
var fileData = new Blob([response], { type: 'application/pdf' }); 

// Cross-browser using FileSaver.js 
fileSaver.saveAs(fileData, thisPDFfileName); 

就像一個魅力,跨瀏覽器。

感謝@Nicros在他的回答中指出filesaver.js。我做了這個答案,以便用戶可以快速複製和粘貼一個例子,誰不想使用MS特定的代碼。 (跨瀏覽器的岩石)