IE9 bug: 在textarea中复制内容会丢失换行符

这是我们在实际开发中实实在在遇到的问题,没有任何悬念。这个问题就是:

在IE9中,在HTML多行文本框textarea中输入带有换行的内容,比如在这篇随笔下面的评论框中输入,然后选中文本框中的内容Ctrl+C/Ctrl+V粘贴到记事本中,所有换行符会丢失,变成一行。

经过测试,在IE6, IE8, Chrome, Firefox中都不存在这个问题。

stackoverflow上也提到了这个问题 - IE9 and TEXTAREA newlines,并提供了你轻意不会采用的解决方法,就是让IE9倒退至IE7,在<head>中添加如下代码:

<!-- Mimic Internet Explorer 7 -->
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >

一个很小的问题,却给我们实现一个功能带来了大麻烦!

园子里找了找,huajs还发现了IE9的另外一个bug(详见发现了IE9里的一个bug),也是针对textarea的,这里也拿出来示众一下。

简而言之,就是IE9会解析textarea中的html代码,测试代码如下(代码来源):

<!DOCTYPE HTML>
<html>
<head>
    <title></title>
</head>
<body>
<textarea id="t" rows="6"></textarea>
<script>
var t = document.getElementById("t");
t.innerHTML = "<p style='color:red'>aaaa</p>";  // 只能在IE9中被解析,其他浏览器不解析
/*下边是我自己测试的结论:
 textarea表示文本区域,本应该把它里边的各种文字、标签等显示成纯文本的形式。
    直接把诸如
    <p style='color:red'>aa</p>的html形式标签放到textarea里,在IE9及其他浏览器里都会把P标签显示出来,
    这个应该是正确的解析,没什么问题。
    但是,把
    <p style='color:red'>aa</p>
    通过JS的innerHTML向textarea里插入,就能(只能)被IE9解析成红色的aa,把p标签当成html标签解析,
    p被过滤掉了(注意,<!DOCTYPE>的文档声明必须要加上,不加的话,IE9就不会解析p标签了)。
    当然,textarea里一般不应该用innerHTML方法插入内容。
    
*/
</script>
</body>
</html>
posted @ 2012-04-14 20:39  dudu  阅读(4905)  评论(8编辑  收藏  举报