概要

フレームが使用されているページにおいて、検索エンジンなどから直接フレーム内のページを指定されると困る場合があります。
そこで、直接フレーム内のページを指定された場合に、強制的にフレーム全体が表示されるようにする方法を考えてみました。

JavaScriptを利用してフレームセットを強制表示する

JavaScriptから window.location.href プロパティの値を操作する事で、フレームセットの強制表示を実現します。

[JavaScript関数(common.js)]

//概要:フレームセットから呼び出され、引数で指定されたフレームにGET引数で指定されたURLを指定する。
//関連:loadFrameSet
function loadFrame(frameName) { var mainFrameURL = location.search.substring(1); if (mainFrameURL != '') { eval(frameName + '.location = "' + mainFrameURL + '";'); } } //概要:非フレームセットから呼び出され、フレームセットを強制的に表示する。 //関連:loadFrame function loadFrameSet(frameSetURL, currentPageURL) { if (parent.location == location) { location = frameSetURL + "?" + currentPageURL; } }

[フレームセットを定義しているHTML(index.htm)]

<html>
<head>
<script language="JavaScript" src="common.js"></script>
</head>
<frameset cols="180,620" onLoad="loadFrame('mainFrame')">


<frame name="leftFrame" scrolling="NO" noresize src="menu.htm">
<frame name="mainFrame" src="main.htm">
</frameset>
</html>

[フレームを構成するHTML(main.htm)]

<html>
<head>
<script language="JavaScript" src="common.js"></script>
</head>
<body>
<script language="JavaScript">
<!--
loadFrameSet('index.htm', location);
-->
</script>
....
</body>
</html>

当然、ブラウザのJavaScriptが無効になっていれば使用できません。
GET引数ではなくCookieを使う方法もありますが、ブラウザの設定に依存しないGET引数のほうが、より確実に動作すると思います。(Cookieは、ブラウザの設定によって受け取らないようにする事ができてしまいます。)

参考リソース