Javascriptが有効でないブラウザがアクセスしてきた再、YahooMailのようにエラーが表示さてた別ページへ移す方法を教えてください。
プログラミング言語はPHPで。
発想を変えて、有効なブラウザがアクセスしてきた場合に、
正常なページに飛ばすというのはどうでしょうか?
<html>
<body onload="window.location.href='有効なページ.php'">
JavaScriptが無効です。
</body>
</html>
サーバサイドで、ターゲットブラウザのJavaScriptの有効無効を
判断して振分(リダイレクト)できるかもしれませんが、
セキュリティ設定などで、実際のScript動作はわかりませんので、
「Scriptが機能すれば、正常なページへ」というふうに
持っていったらどうかと思います。
(Javascriptで。)
(PHPで。)
//Javascriptが無効なら行くページへジャンプ
?>
と、並べて書くのはどうでしょうか。
えぇ?いやいや、その方法を聞いているのですよ。別に Locationの方法は聞いていませんけど。
この場合は header() で Location か Refresh を吐いてやればいいと思うんですけど、どうでしょうか。
そのまま飛す
<?php header("Location: {$target_url}"); ?>
なんか表示してから飛す
<?php
// 判定...
// 飛すまでの時間
$wait = 10;
// 飛すURL
$target = "http://example.com/hoge";
header("Refresh: {$wai};URL={$target}");
?>
おねがいです。質問をみてください。
PHPのlocationの方法は聞いていません。Javascriptが無効をPHPで判断できるのか聞いているのです。
PHPではなくjavascriptで実現できると思います。
Yahooでは
<script type="text/javascript"></p> <p><!-- </p> <p> if(typeof top.frames["wmailmain"] != "undefined") window.open("<a href="http://mail.yahoo.co.jp" target="_blank">http://mail.yahoo.co.jp</a>", "_top");</p> <p>// --></p> <p></script>
<noscript>
<META HTTP-EQUIV=Refresh CONTENT="0; URL=/ym/login?nojs=1">
</noscript>
で、実現させています。
typeofは
http://www.res-system.com/item/505
によると
あるJavaScipt関数が有効か否かを判断するのに使用され
typeof(aaaaa)に対してundefinedを返します。
上のYahooのコードは
typeofで文字列を返すことが出来れば、メールへ
返すことが出来なければ、ヘッダーでリフレッシュをかけ別ページに飛ばしています。
もし、PHPにこだわらないのであれば、上述のコードを一部変更することで、すぐに実装できるかと思います。
なるほど。参考になります。
ところで Gmail http://mail.google.com/mail/ はどのようにして判断していると思いますか?
連続ですみません。
Gmailでどう判定しているかなのですが、予想で申し訳ないのだが
function wfs()でcookieのチャックとブラウザのチェックは
間違いなく行っているのですがJavascriptがいまいち見当たらないのです。
Javascriptが動かないとif (wfs())が反応しないてので判定しているか、<noscript>だけで判定しているのか。。
これはちょっと、把握し切れなかったので想像の内容なので
誤っていたらすみません。。
さすがGoogleって感じですね。技術的にも世界TOPだけはあります。
Gmailでもソースを見ると
<noscript></noscript>
でスクリプトが動かない場合の文章を表示しています。
http://www.htmq.com/html/noscript.shtml
function wfs()以下に
ブラウザーのチェック+読み込むページのURLを生成しています。
それを元に
if (wfs()) {
document.write('<frameset onload=lj() rows="100%,*" border=0><frame name=main src="ここにURL" frameborder=0 noresize scrolling=no><frame name=js src="ここにURL" frameborder=0 noresize></frameset>');
}
実際のGmailを表示しています。
Yahooと考え方は基本的には同じようです。
スクリプトが動く時にどうメール昨日のページを表示するかで
若干の差異があるようです。
bodyは触りたくないですね。ほかの方法でお願いします。
できればサーバサイドで判断して、有効でなければ別ページにしたいのです。有効であればそのまま表示させたいのです。
提示していただいた方法だとJavaScriptを必要とするページに付いたときに無効にしてしまえば意味がないでしょ?そうではないんでよね。