2015-06-12 188 views
8

嵌入從BLOB URL文件時,我有一個是在客戶端發送一個文件作爲arraybuffer然後將其讀入一個blob對象的網絡服務:「訪問被拒絕」的IE

$scope.contentType = response.headers["content-type"]; 
$scope.file = new Blob([response.data], { type: $scope.contentType }); 
$scope.fileUrl = URL.createObjectURL($scope.file); 
$scope.content = $sce.trustAsResourceUrl($scope.fileUrl); 

我使用一個對象標籤的容器:

<object id="documentContainer" ng-show="loaded" ng-attr-type="{{contentType}}" ng-attr-data="{{content}}" class="document-container"></object> 

這在FF,鉻,移動瀏覽器的偉大工程,網絡瀏覽器受到外來物種誰從未有過的人性,等接觸,但不是在IE開發。

當對象標籤的數據參數設置,IE在控制檯響應與

Error: Access is denied.

這似乎是某種在IE的安全功能,其中它不希望使用該文件作爲一個源,因爲它駐留在客戶機上。它禁止訪問,即使您使用JavaScript來創建一個具有數據源集的全新dom元素。

微軟提供了自己的blob方法,如msSaveOrOpenBlob,但我需要能夠在瀏覽器中嵌入文件,而不是提示用戶在外部應用程序中打開文件。

有誰知道一種解決方法或方法來嵌入blob,它可以是多種文件類型,在IE中?我不願意爲了容納IE而急劇重構Web服務和前端代碼,但看起來可能是這種情況。

回答

2

我認爲答案是「否」。我們的網站即時生成PDF,但我們嗅探瀏覽器可以使用返回的PDF完成什麼。

例子:http://www.cloudformatter.com/CSS2Pdf.Demos.Structures

如果您使用的是Chrome,你可以選擇「嵌入PDF」在這裏,它就像一個魅力......如果你在IE瀏覽器,即使你選擇「嵌入」,它下載文件。因爲IE不能,我們只是將IE上的任何人重新路由到下載代碼。

http://caniuse.com/#feat=datauri

不要讓我們開始還有什麼是錯誤的IE瀏覽器,幾頁的剛分手,因爲IE停止序列化的結束標記文檔中的一些「P」標籤。

+0

雖然blob api與使用數據uris相當不同。數據URI實際上僅用於編碼小文件 - 我認爲大多數瀏覽器的長度都有幾MB的限制。 – mrturburdaugh

+0

4GB的大部分,只在IE瀏覽器。根據上面的鏈接,4GB限制從IE 9開始。 –