在IE中使用xmlhttprequest只包含body标签的内容
问题描述:
当我尝试使用Firefox中的xmlhttprequest对象将htm文件的内容转换为div时,它包含了所有内容,但在IE中它只包含body的内容标签。换句话说,它会忽略页面的所有样式(在标签头部),使其变得丑陋。在IE中使用xmlhttprequest只包含body标签的内容
当在Internet Explorer中使用xmlhttprequest时可以获取整个页面吗?
编辑:
document.getElementById('divtoreceivetheresponse').innerHTML = xmlHTTP.responseText
这条线FF获取页面内容,包括<head
></head
>部分。
在IE中它只是获取<body
></body
>部分中的内容。
答
我从别处得到了答案。基本上它包括所有的页面(不只是身体),但IE浏览器选择不渲染它(可能是正确的行为)
因此,我编制了一些代码来提取CSS,将它放在头部,身体的东西在目标股利。因此,外部页面的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>
的代码是远非完美,但它的工作,我可能会改善位码位现在我知道它的工作原理
请出示一些代码。 – 2010-08-07 20:19:37
我不认为显示代码会添加对问题有用的任何内容。我写的代码不再存在,因为它已经被替换为尝试使用隐藏的iframe获得相同的结果。 – MrVimes 2010-08-07 22:05:02
我想我可以幽默你。 – MrVimes 2010-08-07 22:05:46