2014-01-17 69 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內容是否因用戶輸入而改變,或者您是否試圖從服務器返回時顯示頁面?