2014-01-17 30 views
2

我有一些JavaScript中,我与工作的遗留页面读取网页的整个HTML,以便它可以被保存到一个文件:如何防止从outerHTML/innerHTML中删除双引号?

html = document.documentElement.outerHTML; 

但是这和innerHTML替代都脱光围绕某些属性值的双引号导致HTML,我不能用于以后的处理。

例如

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 

成为

<META content="text/html; charset=utf-8" http-equiv=Content-Type> 

当我“查看源文件”的报价是正确的我怎么能得到支持JavaScript的正确的HTML?如果相关,我的开发环境是Visual Studio 2013和Internet Explorer 10(以怪癖模式)。

说明:稍后处理的第一步是将HTML加载到XMLDocument中。问题是由于缺少双引号导致失败。

回答

1

大多数浏览器都不这样做,根据HTML5 CR,即使在HTML序列化中,所有属性值在序列化中都显示为双引号。但IE 8和更老的版本使用部分不同的序列化。尽管HTML规则并不符合XHTML规则,但结果仍然是正确的(但IE 8和更早版本不支持XHTML--它们消化XHTML,但仅仅是因为它们的标签汤分析器是宽容的)。

您可能会考虑使用将HTML转换为XHTML的后处理器。或者您可以编写自己的功能,相当于在现代浏览器中获得outerHTML。序列化在HTML5中被详细定义,所以这将是相对简单的。

0

如何防止从externalHTML中删除双引号?

你不行。但是,如果HTML规范允许的话,浏览器只会这样做。

但是,这剥去了一些属性值的双引号,导致HTML,我不能用于以后处理。

此问题最好通过修复处理器来解决,因为它可以处理HTML,而不是试图强制客户端提供处理器期望的任何内容。

您可以通过将HTML解析器和XHTML序列化程序以任何语言传递给该文件来解决此问题,但仅使用HTML解析器是一种更简单的选择。

1

outherHtml和innerHtml都不能保证给你在源代码中看到的相同的html。浏览器将元素序列化为一个字符串,而不是返回实际的源html代码。

一种解决方法是返回父元素的innerhtml而不是元素的outerhtml。这有时更准确。当然,这假定父母没有其他孩子。 但是,您要查看整个文档,因此没有父元素。

我认为解决方案将需要另一种方法来处理整个文档。 Perhpas在ajax调用中请求页面,并将整个响应发送到服务器。

此代码在哪些页面中运行?它是在您自己的网站中控制的网页中,还是包含在您无法控制的许多网站中?页面的html内容是否因用户输入而改变,或者您是否试图从服务器返回时显示页面?