[js] iframeからのアクセスかブラウザでの直アクセスか判別する

同タイトルの質問より。
もうちょっと具体的にソースを書いてみる。

index.html(フレームを呼び出すページ)

iframeのsrc属性で、ファイル名に続けて適当にパラメーターをつける。

<iframe src="inner.html?frame=true"></iframe>

inner.html(フレームの中ページ)

JavaScript

<script type="text/javascript">
(function(){
	 if(location.search.indexOf("frame=true")!==-1){
		document.write("フレームからの呼び出しです");
	}else{
		document.write("直接アクセスしています");
	}
})();
</script>

JavaScriptの場合、パラメーターはlocationで拾えるのでindexOfとかmatchとかで調べる。
イベントハンドらはwindow.onloadとかでもいい。

コンテンツを非表示にしたいならstyleを弄るのが楽かな~。

<!DOCTYPE HTML>
<html lang="ja_JP">
<head>
	<meta charset="UTF-8">
	<title>inner.html(フレームの中ページ)</title>
	<script type="text/javascript">
	(function(){
		 if(location.search.indexOf("frame=true")!==-1){
			document.body.style.display="block";
		}
	})();
	</script>
	<style type="text/css">
		body{display:none}
	</style>
</head>
<body>
<h1>iframeからのアクセスかブラウザでの直アクセスか判別するテスト</h1>
<div style="background:#eee;height:400px">インラインフレームから見てね!</div>
</body>
</html>

PHP

<?php
if(isset($_GET&#91;"frame"&#93;)&&$_GET&#91;"frame"&#93;==ture){
	print "フレームからの呼び出しです";
}else{
	print "直接アクセスしています";
}
?>

PHPの場合はグローバル変数$_GETにパラメータがあるかどうか調べる。

PHPでコンテンツを見えなくするならページの先頭でdieしてしまうのが早いかな。

<?php
if(isset($_GET&#91;"frame"&#93;)&&$_GET&#91;"frame"&#93;!=ture){
	die("トップページからアクセスしてください");
}
?>
<!DOCTYPE HTML>
<html lang="ja_JP">
<head>
	<meta charset="UTF-8">
	<title>inner.html(フレームの中ページ)</title>
</head>
<body>
<h1>iframeからのアクセスかブラウザでの直アクセスか判別するテスト</h1>
<div style="background:#eee;height:400px">インラインフレームから見てね!</div>
</body>
</html>

location.href=”index.html”とかheader(“location:index.html”)とかで強制的に飛ばしてもいい。

Leave a Comment.