猿问

数据URI方案和Internet Explorer 9错误

我在将RFC 2397数据url方案与IE 6-9版本一起使用时遇到问题。当使用当前版本的Safari,FF,Opera和Chrome时,下面的示例代码可以正常工作。


data:text/html;base64,PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9aHR0cDovL2dvb2dsZS5jb20vIj4g

要么


data:text/html,%3Cmeta%20http-equiv%3D%22refresh%22%20content%3D%220%3Burl%3Dhttp%3A//google.com/%22%3E%20

如果以上代码粘贴在几乎所有浏览器(不包括IE)上,它将导航到google.com,尝试使用IE时失败,并显示以下错误。


网页无法显示


最可能的原因:


此网页上的某些内容或文件需要您尚未安装的程序。

您可以尝试的方法:


在线搜索可用于查看此Web内容的程序。


重新输入地址。


检查生成的IE错误页面的页面源时,有一个链接指向文件关联和协议。


协议类型:


说明:未知


Windows无法识别此协议。


我意识到使用data:协议可能不是最直接的方法,或者在大多数情况下不是最佳选择,但是我必须在特定项目中使用它。


我到处搜索解决方案,并尝试使用IE尝试许多示例,希望这是我的语法,但尚未找到解决方案。


暮色呼如
浏览 504回答 3
3回答

泛舟湖上清波郎朗

对我来说,寻找可以挽救document.execCommand生命。它使用与iFrame其他一些示例类似的方法,但是execCommand使Save As功能保持一致。这是一个例子var getCsvFileForIE = function(target) {  var csvData = target.attributes["data-csv"].value;  if (navigator.appName === "Microsoft Internet Explorer") {    csvData = decodeURIComponent(csvData);    var iframe = document.getElementById('csvDownloadFrame');    iframe = iframe.contentWindow || iframe.contentDocument;    csvData = 'sep=,\r\n' + csvData;    iframe.document.open("text/html", "replace");    iframe.document.write(csvData);    iframe.document.close();    iframe.focus();    iframe.document.execCommand('SaveAs', true, 'data.csv');  } else {    if (console && console.log) {      console.log('Trying to call getCsvFileForIE with non IE browser.');    }  }};我们针对IE执行此操作,对于所有其他浏览器,我们使用标准的Data URI链接。您可以查看完整的要旨以获取更多详细信息。向安德鲁金发女郎(Andrew Blondau)表示指导的帽子提示。更新确定浏览器是否支持数据URI的更好方法supportsDataUri = 'download' in document.createElement('a');似乎IE仍然遇到问题。对于IE10 +,您可能需要使用,msSaveOrOpenBlob而对于IE8 / 9,您仍然需要在execCommand中进行操作iFrame。更新2存在用于检测数据uri方案的Modernizr问题。它引用了另一个SO答案。一定还要检查那些。
随时随地看视频慕课网APP
我要回答