为了账号安全,请及时绑定邮箱和手机立即绑定

数据URI方案和Internet Explorer 9错误

数据URI方案和Internet Explorer 9错误

暮色呼如 2019-12-04 10:52:51
我在将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尝试许多示例,希望这是我的语法,但尚未找到解决方案。
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超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答案。一定还要检查那些。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 503 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信