iFrame内から要素を取得する


回答:


382
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

あなたはもっと簡単に書くことができます:

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

そして、最初の有効な内部ドキュメントが返されます。

内部ドキュメントを取得したら、現在のページの要素にアクセスするのと同じ方法で内部にアクセスできます。(innerDoc.getElementById...など)

重要: iframeが同じドメインにあることを確認してください。そうしないと、その内部にアクセスできません。それはクロスサイトスクリプティングでしょう。


4
すばらしい答えです。あなたができることを知っていましたか:var innerDoc = iframe.contentDocument || iframe.contentWindow.document; //読みやすく、同じ意味
David Snabel-Caunt 2009

5
3項演算子以上に混乱している人を見てきました。彼らは最初の有効なものが返されることを知らないようです。
geowa4 2009

5
実際、回答を編集してそれを含めると、肩越しの男から何をしたのかと尋ねられました...
geowa4

12
おそらく、単純にするために、より複雑なコードを使用するよりも教育する方がよいでしょう:)
David Snabel-Caunt 2009

1
@JellicleCat:それを回避する方法は「クロスサイトリクエストフォージェリ」を実行する方法であり、「ワンクリック」攻撃または「セッションライディング」とも呼ばれます
CSharper

12

ロード後は必ずiframeにアクセスしてください。jQueryなしの古いが信頼できる方法:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>

<script>
function access() {
   var iframe = document.getElementById("iframe");
   var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
   console.log(innerDoc.body);
}
</script>

3
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')

CallYourFunction() ページ内の関数であり、その関数アクション


5
これは、要素への参照を取得せずに、iFrameから関数を呼び出しています。
Nick Mitchell 14

3

上記の回答は、Javscriptを使用した優れたソリューションを提供しました。簡単なjQueryソリューションは次のとおりです。

$('#iframeId').contents().find('div')

ここでのトリックは、jQueryの.contents()メソッドです。.children()これは、HTML要素のみを取得できるのとは異なり.contents()、テキストノードとHTML要素の両方を取得できます。そのため、iframeを使用してiframeのドキュメントコンテンツを取得できます。

jQueryについてさらに読む.contents().contents()

iframeとページは同じドメイン上にある必要があることに注意してください。


1

他の答えはどれも私のために働いていませんでした。最終的に、探していたオブジェクトを返す関数をiframe内に作成しました。

function getElementWithinIframe() {
    return document.getElementById('copy-sheet-form');
}

次に、そのような関数を呼び出して要素を取得します。

var el = document.getElementById("iframeId").contentWindow.functionNameToCall();

0

iframeが同じドメイン内になく、親からその内部にアクセスできないが、iframeのソースコードを変更できる場合は、iframeによって表示されるページを変更して、親ウィンドウにメッセージを送信できます。これにより、ページ間で情報を共有します。いくつかの情報源:


-3

以下のコードは、iframeデータを見つけるのに役立ちます。

let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.