下面是您可以按照步驟瞭解如何將iframe內容複製到字符串,修改它並將其替換到iframe中的步驟。這些步驟旨在在您的Chrome調試器中執行,僅用於教育/演示目的。一旦你瞭解了這個過程,你就可以嘗試在你的網站上覆制代碼。
運行每一個功能在Chrome的調試時間:
// test iframe I loaded in a sandbox also at http://example.com
$('body div:first').before('<iframe src="http://example.com/company"></iframe>');
// retrieved the body of the iframe - I cloned it so I could perform operations
// on the copy without bothering the iframe content.
iBody = $('iframe:first').contents().find('body').clone();
// got the head
iHead = $('iframe:first').contents().find('head').html();
// if there is script in the body, it really messes things up. So in my tests,
// I had to remove it before adding it back to the iframe.
iBody.find("script").remove();
// verify there are no script elements
ibody.html();
// replace the iframe head
$('iframe:first').contents().find('head').html(iHead);
// replace the iframe body first with a placeholder. The body is the sensitive
// part. If you destroy the DOM, it can make the entire page, including
// the parent, turn completely white.
$('iframe:first').contents().find('body').html('<div></div>');
// ** inserted something in the copy to prove we modified it!!
iBody.append("<div style='position:absolute;z-index:5000; color:red; " +
"background-color:white;'>JAMES WAS HERE</div>");
// now replace the body
$('iframe:first').contents().find('body').html(iBody);
在網站的底部,iframe中,我看到了我的留言紅色在白色背景上。我還可以看到它的來源:
$('iframe:first').contents().find('body').html();
我在匿名網站上進行這些操作,使用Chrome的調試器控制檯運行的命令。第一條命令會在主頁中使用iframe中的網站公司頁面創建一個iframe。其餘的命令獲取該iframe的頭部和主體,克隆主體,向主體克隆中添加一些內容,例如「JAMES WAS HERE」消息,然後用該副本替換iframe主體。
我還在我的瀏覽器中加載了http://getsatisfaction.com,並在iframe中加載http://getsatisfaction.com/explore/product-innovation,以此驗證了結果。通過重複上述步驟,我看到了我的消息,「JAMES在這裏」。
**我遇到的最嚴重的問題是無法在副本中保留JavaScript或CSS樣式標籤。樣式的解決方案是在之前將所有樣式修改添加到iframe。 **
由於某種原因,瀏覽器試圖運行JavaScript並拋出錯誤。這些錯誤的上下文讓我認爲JavaScript正在頂層上下文中運行,而不是iframe上下文!這對你來說可能是個不錯的選擇。您可能需要制定另一個在彈出窗口或內聯中顯示預覽的計劃。而且,這可能會在具有不同JavaScript的不同網站上表現不同。它也可能在IE中表現得很奇怪。
總之,實際上我沒有看到這個解決方案是支持生產網站的東西,因爲JavaScript必須在iframe中刪除;但是,根據您的需要,如果您不需要iframe DOM來使用任何JavaScript,則可以在生產中進行此項工作。
儘管如此,這是一個有趣的探索問題!
您爲什麼要這樣做?你能詳細說明嗎?想到的快速膝蓋反應是「不要這樣做」,但我懷疑你爲什麼這樣做的原因是你不告訴我們的? :)如果你告訴我們你的目標是什麼,我想我們可以做得更好。祝你好運! – jmort253 2012-04-08 04:57:48
我創建了一個沙箱,可以讓我爲最終用戶正確顯示html模板。考慮預覽電子郵件,您需要查看最終結果在另一個Web窗口中的內容。如果沒有沙箱,你會施加不屬於消息內容的其他樣式和格式,反之亦然。此代碼允許我在頁面上放置iframe,而不會影響我的代碼或頁面本身的其餘部分。 – Middletone 2012-04-08 05:05:14
這是一個預覽窗格,因此內容不一定在當時的任何其他地方,因此爲什麼我不只是用信息加載另一頁。 – Middletone 2012-04-08 05:07:52