私はこのようなものを持っています:
<html>
<body>
<iframe id="someFrame"></iframe>
</body>
</html>
そして、jQueryを使用して、完全に同等のHTMLが次のようになるように要素を記述したいと思います。
<html>
<body>
<iframe id="someFrame">
<!-- inside the iframe's content -->
<!-- <html><body> -->
<div>A</div>
<div>B</div>
<div>C</div>
<!-- </body></html> -->
</iframe>
</body>
</html>
あるいは、普通のJavascriptでも問題ありません。
ありがとう。
編集:もう少し調査した後、iframeのcontentDocumentプロパティに相当するIEを探しているようです。 "contentDocument"はFFがサポートするW3C標準ですが、IEはサポートしません。(驚き)
両方を行うことができます。ターゲットを変えるだけです。
var ifrm = document.getElementById('myIframe');
ifrm = ifrm.contentWindow || ifrm.contentDocument.document || ifrm.contentDocument;
ifrm.document.open();
ifrm.document.write('Hello World!');
ifrm.document.close();
いくつかの調査と、Mikeからの確証的な回答の後、これが解決策であることがわかりました。
var d = $("#someFrame")[0].contentWindow.document; // contentWindow works in IE7 and FF
d.open(); d.close(); // must open and close document object to start using it!
// now start doing normal jQuery:
$("body", d).append("<div>A</div><div>B</div><div>C</div>");
document
内のiframe
要素にアクセスするには、2つの信頼できる方法があります。
var iframeDocument = window.frames['iframeName'].document; // or // var iframeDocument = window.frames[iframeIndex].document;
デモ (
var iframeDocument = document.getElementById('iframeID').contentDocument; // or // var iframeDocument = document.getElementById('iframeID').contentWindow.document;
デモ (
私はここで手足を外に出て、これまでに提案された答えが不可能であることを提案します。
このiframeが実際にsrc = "somepage.html"を持っている場合(これを示す必要がありますが、そうでない場合、iframeを使用するポイントは何ですか?)、Jqueryがすべてのブラウザーのフレーム間でhtmlを直接操作できるとは思いません。この種のことに関する私の経験に基づいて、包含ページは、iframeページから関数を直接呼び出したり、Javascriptに何らかの接触をしたりすることはできません。
「somepage.html」(iframeに読み込まれるページ)は、2つのことを行う必要があります。
たとえば、somepage.htmlは次のようになります。
<html>
<head>
<script src="jquery.js">
</script>
<script language=JavaScript>
<!--//
var bridge={
setHtml:function(htm) {
document.body.innerHTML=htm;
}
}
$(function() { parent.setBridge(bridge); });
//--></script>
</head>
<body></body>
</html>
含まれているページは次のようになります。
<html>
<head>
<script src="jquery.js">
</script>
<script language=JavaScript>
<!--//
var bridge;
var setBridge=function(br) {
bridge=br;
bridge.setHtml("<div>A</div><div>B</div><div>C</div>");
}
//-->
</script>
</head>
<body><iframe src="somepage.html"></iframe></body>
</html>
これは少し複雑に見えるかもしれませんが、多くの方向に適応させることができ、少なくともIE、FF、Chrome、そしておそらくSafariとOperaで動作するはずです...
私はこれがクロスブラウザ互換であることがわかりました...以前の答えを少し越えて、私自身の少しの試行錯誤をしました。 :)
これをレポートのダウンロードに使用しています。エラー(メッセージ)が発生した場合は、iFrameに表示されます。ほとんどのユーザーは、おそらくiFrameを非表示にします。私は多機能を使用しています。
問題は、レポートのダウンロードボタンをクリックするたびにiFrameの内容をクリアする必要があることです。ユーザーはパラメーターを変更できますが、iFrameにメッセージとして表示される結果はありません。結果がareの場合、iFrameは空のままです-以下のコードがそれをクリアし、window.open(...)
メソッドがContent-Disposition: attachment;filename=...
資料。
var $frm = $("#reportIFrame");
var $doc = $frm[0].contentWindow ? $frm[0].contentWindow.document : $frm[0].contentDocument;
var $body = $($doc.body);
$body.html(''); // clear iFrame contents <- I'm using this...
$body.append('<i>Writing into the iFrame...</i>'); // use this to write something into the iFrame
window.open(Module.PATH + 'php/getReport.php' + Report.queryData, 'reportIFrame');
contentDocument
をサポートするブラウザはありませんが、このようにコーディングしているので、そのままにします。誰かが古いブラウザを使用していて、互換性の確認/問題を投稿できますか?