对document.write()的跨浏览器支持

时间:2015-01-22 07:40:31

标签: html html5 dom internet-explorer-11 ie11-developer-tools

我有一个分配给变量var doc的HTML Document对象。使用这个文档对象我将字符串值渲染到一个文本文件,其中值被渲染和写入,但在IE11浏览器中格式不正确,但在IE8,IE10,ff n chrome中工作正常。请找到我的下面的代码:

  function savecontent(str){
  var filename = "data.txt";
  var str=replaceAll(str,'<doublequote>','"');
  var w = window.frames.w;
  if( !w )
     {
             w = document.createElement( 'iframe' );
             w.id = 'w';
             w.style.display = 'none';
             document.body.insertBefore( w,null );
             w = window.frames.w;
             if( !w )
             {
                     w = window.open( '', '_temp', 'width=100,height=100' );
                     if( !w )
                     {
                             window.alert( 'Sorry, could not create file.' ); return false;
                     }
             }
     }

  var doc = w.document;
  doc.open('text/plain');
  doc.charset="iso-8859-1";
  doc.write(str);
  doc.close(doc.write(str));
  w.close();
  if( doc.execCommand( 'SaveAs', false, filename ) )
     {
             window.alert("Please save the file.");
     }
}

我的str可能是什么样的 employee_firstname,employee_lastname,employee_id,employee_salary,employee accountno,employee_dob等。

在IE11中呈现为,

employee_firstname,employee_lastname,
employee_id,employee_salary,employee accountno,employee_dob

但是在预期的位置和数据在IE8中呈现,ff n chrome以下面的格式:

employee_firstname,employee_lastname,employee_id,
employee_salary,employee accountno,employee_dob

在IE8等其他浏览器中我注意到的不同,FF n chrome是换行符 在IE11中与其他浏览器相比有所不同。 任何人都可以告诉我如何在IE11浏览器中的文本文件中正确格式化数据呈现格式,或者替换为document.write()吗?

1 个答案:

答案 0 :(得分:1)

问题无法从提供的代码中重新构建,但问题的核心似乎是您正在使用open()方法生成要在内联框架中显示的新文档Document方法1}}对象。这是相对良好的支持,但仅当创建的文档是HTML文档而不是纯文本文档时。

当您尝试使用text/plain格式时,浏览器会以不同的方式处理事情。它们实际上创建了一个HTML文档,放在创建文档的DOM树中。它包含一个body部分,它只包含您编写的文本或围绕它的pre元素包装器,使其按原样显示。例如,旧版本的IE生成pre元素,IE 11则不生成pre元素。可能有人认为IE 11做了正确的事情:纯文本并不意味着文本应该按照分成线条的方式呈现。

无论如何,避免这种情况的方法是生成一个HTML文档并在代码中插入doc.open('text/html'); doc.write('<pre>' + str + '</pre>'); 包装器,前提是您希望按原样显示文本:

{{1}}