2011-10-15 26 views
1

This questionは満足のいく回答を得られなかったので、もう一度お尋ねします。iframeの内容全体を置き換える方法は?

私はこのように私のiframeを取得することができます:

var iframe = document.getElementById('preview'); 
var win = iframe.contentWindow; 
var doc = win.document; 

そして、このようなことにはいくつかの初期のHTML記述:

doc.write('<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" href="reset.css"></head><body>blah blah</body></html>'); 

をそして、それは素晴らしい作品が、今、私は全体の事を交換したいですいくつかの新しいコンテンツで。どうやってやるの?

私も<head>を意味する「全体のこと」によって、明確にすること。私はいくつかの外部JSとCSSをリンクする必要があります。

が好ましく、これはまた<!DOCTYPE>が含まれるであろうが、それはこの時点では非必須です。

+0

@RobG:実際には、ありません。ここに掲示された2つの回答は、そこに掲載された回答とはまったく異なり、実際に働いています。なぜ私は何か違うと思ったのですか?最後の質問が投稿されてから半年が経過しています。ここには新しいユーザーベースがあり、古い質問に効果的に衝突することができないためです。 – mpen

+0

@RobG:また、Esailijaは私が知らなかったいくつかの洞察的なヒントを投稿し、他の答えにも存在しませんでした。 – mpen

+0

あなたの質問は、同じ時間に投稿された非常に似たものと混同されています。 – RobG

答えて

2

あなたは、単にDOMから古いiframeのノードを削除し、新しいコンテンツを含む新しいものを作成することができます。

+0

はい、理論的にはiframe全体を置き換えることはできますが、iframeのドキュメントだけを置き換える方が効率的ではないでしょうか?それは可能ですか? – mpen

+1

'doc.documentElement.outerHTML'を何かに設定すると、' message: "NO_MODIFICATION_ALLOWED_ERR:DOM Exception 7" 'となるので、文書全体を置き換えることはできませんが、' '要素以下のものは可能です(' 'と' ' ) – Esailija

+0

@エセイリア:知っておいてよかった!あなたの助けを借りて、私は今知る必要があるすべてを持っていると思う! :)私は、これがDarinのソリューションを最も効果的な答えにすると信じています。 – mpen

1

私はinnerHTMLプロパティが動作するはずと信じて使用して:

doc.documentElement.innerHTML = "<script src='blah.js'></script><style></style>" 
+0

ああ...私の試みがうまくいかなかった理由を説明しています。 'documentElement'でそれをしなければなりません!それはうまくいくようですが、私はこの方法で ' 'を設定できません。基本的にこれは '' noの* contents *を置き換えますか? – mpen

+1

'' 要素自体は変更はないが、文書がdoc.doctype.systemId' 'のような特性を有するプロパティ' iframe.contentWindow.document.doctype'を有しています。プロパティは読み取り専用なので、おそらくdoctypeを動的に変更しようとするのはお勧めできません – Esailija

関連する問題