2010-06-13 34 views
3

是否有可能以文本形式獲取當前HTML文檔的來源,與載入時完全相同? (即解析和DOM操作後不是「生成的源」)。從Javascript獲取「未修改」的HTML文檔

注意:在這種情況下,發出額外的AJAX請求來檢索HTML頁面不是一種選擇:文檔可能已更改。

大多數瀏覽器都具有「查看源代碼」功能,它可以提供我想要的內容 - 因此瀏覽器始終保留原始HTML內容。會很好,如果我可以訪問...

+0

抓住它在window.onload選項? – 2010-06-13 14:04:36

+2

@Gert - 儘管它可能會被大量修改,但至少,''中的所有腳本都已經運行。 – 2010-06-13 14:06:04

+0

@Gert它必須逐個字符地與下載的文檔相同。 – 2010-06-13 14:08:50

回答

4

你不能用JavaScript做到這一點,瀏覽器沒有責任保持原來的文件真的。正在製作一個AJAX請求,時間戳是一個選項嗎?如果歷史記錄可用,您可以使用new Date()將加載的頁面日期存儲在new Date()中,並在再次請求文檔時將此時間戳傳遞給服務器。

除此之外...我不知道你是怎麼用JavaScript/HTML做到這一點的。儘管如此,你的實際最終遊戲目標是什麼?你看到一個<form>,它的輸入是否改變了,還是其他的?

+0

我在考慮讓攻擊者難以修改頁面的可能性(通過操縱HTTP流量)。我會構建它的MD5總和,並通過通過HTTPS加載的JavaScript進行檢查。這只是一個粗略的想法 - 我真的不知道,如果我可以做這件事......(由於SOP問題,頁面本身必須通過HTTP加載,但是可以在這樣的頁面中包含HTTPS腳本! ) – 2010-06-13 14:14:05

+0

@chris_l - 有了http/https,你可能會遇到一些跨域問題......我會*真的*按下SOP進行更改。我目前的僱主是通過ISO認證的,我們受到同樣的限制,但爲了整體利益而改變他們是每次都值得。你可以在頁面中添加一個哈希來驗證服務器上的某些東西,一個IP /會話變量會改變每一個負載等等,但是沒有一個可以防止真正的中間人攻擊。如果你能夠推動SOP得到改變,HTTPS/SSL絕對是你的最佳選擇。 – 2010-06-13 14:17:30

+0

@Nick:哦,我的意思是「相同原產地政策」,而不是「標準操作程序」 - 我剛剛意識到這個縮寫的含糊不清...... :-)我害怕,我不能改變這一點:成爲來自外部HTTP頁面的圖像(並且我無法將它們複製到我自己的服務器)。 – 2010-06-13 14:22:42

3

據我所知,這樣做沒有辦法

可以試圖抓住HTML 很早並將其存儲在一個變量,但這是一個非常貧窮的選擇,因爲:

  • 如果很早太早(所有DOM節點之前你會遇到麻煩試圖獲得innerHTML屬性
  • 如果非常早是當DOM準備好進行操作時,它可能已經太晚了(如果你有像<script>document.write(stuff);</script>您可能已經看到了對HTML內容的不同觀點)

儘管AJAX可能帶來很多可能的影響,但重新獲取文檔可能是您在此問題上的最佳選擇。

1

一個非常糟糕的黑客入侵方法是隻使用JS加載頁面。使用單個AJAX調用加載空白頁面以獲取頁面的實際內容。

但是,在做這件事之前,我會重新考慮你想要做什麼以及爲什麼你需要「保存狀態」。