フレームオブジェクトについて

javascript

フレームについて

ウィンドウをオープンした時にwindowオブジェクトをjavascriptから参照したように、
同じドキュメント内にあるframeに対しても、親画面から子画面(子frame)に対して参照ができます。

例えば、以下のようなHTMLを用意します。

test1.html
test2.html
test3.html

はそれぞれ、親画面から呼び出される子画面(フレーム)です。
親画面から上記の3ファイルを呼び出すHTMLを用意します。

<html>
<head>
<title>フレーム使用例</title>
<script src="./jquery.js"></script>
<script src="./main.js"></script>
</head>

<frameset rows="150,*">
    <frame id="frm1" src="test1.html" name="ue">
    <frameset cols="250,*">
        <frame id="frm2" src="test2.html" name="hidari">
        <frame id="frm3" src="test3.html" name="migi">
    </frameset>
    <noframes>
        このページはフレームを使用しています。
    </noframes>
</frameset>

</html> 

画面表示は、このようになります。

このHTMLに対して、main.js内で以下のようにframeオブジェクトを参照してみます。

$(function(){

	//フレームを取得(オブジェクトとして取得される)
	let frm1 = $('#frm1');
	console.log("frm1 -> " + frm1);

	//フレームのwindowオブジェクトを参照する方法
	let frm1_cw = frm1[0].contentWindow;
	console.log("frm1_cw -> " + frm1_cw);
	
	//windowオブジェクトに標準に定義されている「frames」プロパティを参照する
	console.log("frames -> " + frames[0]);

});

ブラウザにアクセスした結果、コンソール画面には次のように出力されます。

frm1 -> [object Object]
frm1_cw -> [object Window]
frames -> [object Window]

出力結果から、「$(‘#frm1’)」で参照した場合と、「frm1[0].contentWindow」と「frames[0]」で参照したものはオブジェクトの種類が異なります。

id指定で取得したものはObjectになり、残りの2つで参照したものはwindow(オブジェクト)になります。

フレーム内のdocumentに対して、操作をしてみます。

先ほどのjavascriptに以下のように追記します。

	window.onload = function(){
		frames[1].document.body.style.background = "#99CCFF";
	}

ここでは、2つめのフレームに対して、bodyタグの背景色を変更しています。
window.onloadを使わない場合、親ウィンドウの全てのコンテンツが読み込まれないままjavascriptの処理が終わるので、背景色をjavascriptで変更した後、子ウィンドウがロードされて処理が無効になってしまいます。

実行した画面は次のようになります。

実際に設置した動作例は、以下のURLです。
https://propansystem.net/blogsample/js/014/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です