FireFox无法正常使用URL.revokeObjectURL

时间:2015-01-27 19:36:29

标签: javascript ajax firefox download blob

我仍然使用JavaScript并遇到了一个我不明白的问题。

守则:

function loadDocumentFromResponse(requestObject, filename){
	console.log('Response from Server gets analyzed...');						
	if( typeof URL === "function" ){								
		console.log('Will use the URL function to revoke an object url');
		var url = URL.createObjectURL(requestObject.response);
        var a = document.createElement('a');
        a.setAttribute('href', url);
        a.setAttribute('download', filename);
        a.click();
        URL.revokeObjectURL(url);
     	// is working with chrome and gets me a download which works
        // firefox also gets into this tree but it does nothing!
	}else{
		// IE, Maxton, Safari and Opera are throwing an Exception, will figure out whats wrong, later....
		console.log('Function URL ist unbekannt');
	}
}

我的问题实际上是IF案例...... Chrome正是按照我的预期进行的,它给了我一个下载。但Firefox,gots功能URL。也没有从blob响应中创建下载...

我的错是什么? IE的任何提示等等?

cu

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 服务器响应中的Content-Dispostion标头可能值为inline而不是attachment;filename=somefile.ext
  2. 仅在同一来源
  3. 时才会尊重download属性

    由于这适用于Chrome,我倾向于排除第二个问题。这意味着这可能是由于服务器原始响应中的Content-Disposition标头造成的。我按照以下步骤进行诊断:

    1. 检查caniuse.com下载属性功能支持,因为它是HTML 5规范。 Firefox中支持 ,但在IE中根本不支持。

    2. 检查了implementation details of the download attribute上的mozilla文档。

    3. (注意,这些步骤很有用,因为你是初学者,最终你只会知道这些东西。当你遇到在不同浏览器中有不同行为的问题时,这是两个非常重要的资源/步骤)

      Firefox会优先考虑文档响应中的标头超过download属性设置的值,而Chrome会优先download属性优先于Content-Disposition标头的值。

      您必须确保responseObject包含“Content-Disposition:”附件的标头; filename = somefile.ext“(替换为您自己的文件名和扩展名)