<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
私が入手したいのは:
test<br/>
<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
私が入手したいのは:
test<br/>
回答:
正確な質問は、jQueryではなく純粋なJavaScriptでそれを行う方法です。
しかし、私は常にjQueryのソースコードにあるソリューションを使用しています。これはネイティブJavaScriptの1行にすぎません。
私にとっては、それは最高の、読みやすく、さらには afaikです。のiframeのコンテンツを取得するための最短の方法。
最初にiframeを取得します
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
そして、jQueryのソリューションを使用します
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
オブジェクトの
contentWindow
プロパティ中にこのトリックを行うInternet Explorerでも機能しiframe
ます。他のほとんどのブラウザはcontentDocument
プロパティをおり、それがこのOR条件で最初にこのプロパティを証明する理由です。設定されていない場合は、を試してくださいcontentWindow.document
。
iframeで要素を選択する
次に、通常はを使用して、getElementById()
またはquerySelectorAll()
からDOM要素を選択できますiframeDocument
。
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
iframeで関数を呼び出す
window
から要素のみを取得して、iframe
いくつかのグローバル関数、変数、またはライブラリ全体(例:)を呼び出しますjQuery
。
var iframeWindow = iframe.contentWindow;
// you can even call jQuery or other frameworks
// if it is loaded inside the iframe
iframeContent = iframeWindow.jQuery('#frameBody');
// or
iframeContent = iframeWindow.$('#frameBody');
// or even use any other global variable
iframeWindow.myVar = window.myVar;
// or call a global function
var myVar = iframeWindow.myFunction(param1 /*, ... */);
注意
これは、同一生成元ポリシーを順守すれば可能です。
document.querySelector('#id_description_iframe').onload = function() {...
せるには、誰かを助けることを願ってそれを囲まなければなりませんでした 。
JQueryを使用して、これを試してください:
$("#id_description_iframe").contents().find("body").html()
それは私にとって完璧に機能します:
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
はうまくいきません。ただし、.getElementsByTagName('body')[0]
そうです。
私の知る限り、iFrameはそのようには使用できません。そのsrc属性を別のページにポイントする必要があります。
プレーンの古いJavaScriptを使用して本体のコンテンツを取得する方法は次のとおりです。これはIEとFirefoxの両方で機能します。
function getFrameContents(){
var iFrame = document.getElementById('id_description_iframe');
var iFrameBody;
if ( iFrame.contentDocument )
{ // FF
iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
}
else if ( iFrame.contentWindow )
{ // IE
iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
}
alert(iFrameBody.innerHTML);
}
タグの間にテキストを配置することは、iframeを処理できないブラウザ(つまり、
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
「src」属性を使用して、iframe htmlのソースを設定します...
それが役に立てば幸い:)
次のコードは、クロスブラウザに準拠しています。IE7、IE8、Fx 3、Safari、Chromeで動作するため、ブラウザー間の問題を処理する必要はありません。IE6ではテストしませんでした。
<iframe id="iframeId" name="iframeId">...</iframe>
<script type="text/javascript">
var iframeDoc;
if (window.frames && window.frames.iframeId &&
(iframeDoc = window.frames.iframeId.document)) {
var iframeBody = iframeDoc.body;
var ifromContent = iframeBody.innerHTML;
}
</script>
window.frames.iframeId.document
私にとっては未定義です。(Ubuntuの13.04、クロム)
javascriptから本文コンテンツを取得するには、次のコードを試してみました。
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
ここで、「id_description_iframe」はiframeのIDです。このコードは私にとってはうまく機能しています。