在IE中使用xmlhttprequest仅包含body标记的内容

时间:2010-08-07 20:02:15

标签: firefox internet-explorer-8 xmlhttprequest

当我尝试使用Firefox中的xmlhttprequest对象将htm文件的内容转换为div时,它包含所有内容,但在IE中它只包含body标记的内容。换句话说,它忽略了页面的所有样式(在head标签中),使其变得难看。

在Internet Explorer中使用xmlhttprequest时是否可以获得整页?

编辑:

document.getElementById('divtoreceivetheresponse').innerHTML = xmlHTTP.responseText

FF中的这一行获取包含<head&gt; </head&gt;的页面内容。部分。

在IE中,它只获取<body&gt; </body&gt;内的内容。部分。

1 个答案:

答案 0 :(得分:0)

我从其他地方得到了答案。基本上它确实包括所有页面(不仅仅是正文),但IE选择不呈现它(可能是正确的行为)

因此我制定了一些代码来提取css,将它放在头部,并将主体内容放在目标div中。所以来自外部页面的html和css都会得到。

<html><head>
<script type="text/javascript" language="javascript">
function include(lyr,url)
{
   if (document.all)
   {
      try {
      var xml = new ActiveXObject("Microsoft.XMLHTTP");
      xml.Open( "GET", url, false );
      xml.Send()

       }
      catch (e) {
      var xml = new ActiveXObject("MSXML2.XMLHTTP.4.0");
      xml.Open( "GET", url, false );
      xml.Send()
      }
   }
   else
   {
            var xml=new XMLHttpRequest();
            xml.open("GET",url,false);
            xml.send(null);
   }

   text = xml.responseText;
   text = text.replace("<html>","");
   text = text.replace("</html>","");
   text = text.replace("<head>","");
   text = text.replace("</head>","");
   text = text.replace("<body>","");
   text = text.replace("</body>","");
   splittext = text.split("<style type=\"text/css\">");
   splittext = splittext[1].split("</style>");
   css = splittext[0];
   everythingelse = splittext[1];

   addCss(css);
   document.getElementById(lyr).innerHTML=everythingelse;   

}

function addCss(cssCode) {
var styleElement = document.createElement("style");
  styleElement.type = "text/css";
  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = cssCode;
  } else {
    styleElement.appendChild(document.createTextNode(cssCode));
  }
  document.getElementsByTagName("head")[0].appendChild(styleElement);
}


</script>
</head>
<body onload="include('adiv','test.htm')">
<div id="adiv">sdfgboui hsdguhwruh o ikuy </div>
</body>
</html>

代码远非完美,但它完成了工作,我可能会逐步改进代码,因为我知道它有效