こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

WinとMacのFirefox以外は違うindexに飛ばすスクリプトについて

Javascript初心者です。
iframeを使用したHP作成後、ブラウザCheckしたところ(細かいバージョン指定まではしていません)
Windows版のブラウザはほぼ全般○ですが、MacはFirefox以外×でした。

なのでindex.htmlに下記判別をさせたいのです。↓
「OSがwinの場合とOSがMacでブラウザがFirefox(Gecko)の場合はそのまま、
それ以外はindex2.htmlに飛ばす。」

スクリプトを自分なりに書いてみたのですが、これであっているのかが、自信がありません。
どなたか上記方法をご存知の方、または下記スクリプトの間違いがわかる方。
お願いします、教えてください。

if(navigator.appVersion.indexOf("win") != -1){
document.write();
else if(navigator.appVersion.indexOf("Mac") != -1){
if{(navigator.userAgent.indexOf('Gecko/')!=-1)
document.write();
}
else{
location.replace("index2.html");
}
}

投稿日時 - 2007-10-02 19:04:17

QNo.3395566

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>else
>{
> location.replace("index2.html")
> if(navigator.userAgent.indexOf('Gecko/')!=-1)
> {
>  dicument.write();
> }
>}
elseの内側のifを実行するまえに どう見てもlocation.replaceが起きてるように見えるんだけど・・・?

>elseの中に入れなくても、else if(比較条件) で大丈夫です
これは if()document.write(); のような書き方に相当するもので
elseも同じ様に else document.write(); という書き方ができるという話だよね。
このdocument.writeを ifに置き換える事が勿論できるんだけど
else if() document.write();
という書き方もできる。「;」によって区切れていないので識別できるんだけれどとても判りづらいから慣れないうちは「{}」で括るという話。
慣れてきたり、有効範囲を識別できるようになってきたらそういう書き方しても良さそうだけど現状でその書き方をするときっと間違える。


余談
--------
こういう複数条件があるけれど、2通りしか判定が無い場合はflagかfunctionで真偽を操作した方がすっきりするし改造しやすいよ。

例(functionが先にあるのがミソ)
--------
function brows_chk()
{
 if(navigator.appVersion.indexOf("win") != -1)return false;
 if(/* index2にならない条件 */)return false;
 if(/* index2になる条件 */)return true;
 if(/* index2にならない条件(2) */)return false;
 /* 以下適当に */
 return false;
}
if(brows_chk())location.replace("index2.html");

投稿日時 - 2007-10-03 06:23:34

ANo.4

>さっきのスクリプトのGeckoのところだけに、
>location.replace("index2.html");
>alert(navigator.appVersion+"\n"+navigator.userAgent);

alert(navigator.appVersion + "\n" + navigator.userAgent);
location.replace("index2.html");
とすることで、ページが移動する前に navigator.appVersionの値と、
navigator.userAgentの値を確認します。



OSがマックで、FireFox以外の場合 index2.htmlを読ますわけですから、
下のソースでOKなはず。MACをもっていないため確認はしていません。

// Macからのアクセスの場合
if (navigator.platform.indexOf('Mac') != -1) {
// FireFox以外からのアクセスの場合
if (navigator.userAgent.indexOf('Gecko') == -1) {
// index2.htmlにとばす。
location.replace("index2.html");
}
}
ちなみに参考できそうなHPありました。
http://www.fureai.or.jp/~tato/DHTML/simple/part4/tips/browschk.htm


SAYKA さんへ、elseの中に入れなくても、else if(比較条件) で大丈夫です。

参考URL:http://www.fureai.or.jp/~tato/DHTML/simple/part4/tips/browschk.htm

投稿日時 - 2007-10-03 00:52:17

補足

borazuさん、ご返答ありがとうございます。
(携帯との判別の件もありがとうございました!お陰で上手くいきました!)

お提示くださったスクリプトの内容と動作を私の環境で調べていました。
お返事が遅くなってすいません。
このままやってみたんですが、MacのIEも、Safariもindex.htmlを読みにいってしまいます。
後、WinもFirefoxがindex2.htmlを読みに行ってしまいました。。。。
書いてくださった内容は「MacでFirefox以外はindex2.htmlへ、
Winの場合記述がないので、そのままindex.htmlへ」ということで、
間違いの欠片すら見当たらないのに、原因がわかりません。

教えてくださったURLを参考に、もう少し、色々試してみて、再度報告させてもらいます!
本当、ご親切な回答ありがとうございます。

投稿日時 - 2007-10-03 02:15:16

ANo.3

javascriptには elseif という構文は無いので else の処理ブロック内でifを処理する形で記述したらうまく行くと思う。

if(A)
{
 //A true処理
}
else
{
 //A false処理
 if(B)
 {
  //A false and B true処理
 }
}


alertは 確認したい前後に挟んで値を表示させる事でデバグをしやすくする手法。
動く筈なのに動いてない場所に埋め込んでも動作しないから動作を確実にしているであろう場所に埋め込んでどこまで正しく動いてるか把握した方が良いんじゃないかな。

投稿日時 - 2007-10-03 00:01:25

補足

ありがとうございます。色々試してて、お返事が遅くなりました。
SAYKAさんの提示してくださった例に当てはめてやってみましたが、
Winでは正常に動くのですが、MacはIE、Safari、Firefoxどれもindex2.htmlを読みに行ってしまいます。
ちなみに下記のように入力しました。

if(navigator.appVersion.indexOf("win") != -1)
{
 document.write();
}
else
{
 location.replace("index2.html")
 if(navigator.userAgent.indexOf('Gecko/')!=-1)
 {
  dicument.write();
 }
}

なんだか、すいません。
alertとか試して原因探して、もう少しやってみます。

投稿日時 - 2007-10-03 02:08:17

ANo.2

それぞれの判定の中でalertを入れて確認してみたら良いよ

alertの例(判定前)
alert(navigator.userAgent.indexOf('Gecko/'));
(判定後)
alert(navigator.appVersion+"\n"+navigator.userAgent);

どこか正しくない場合は どう修正したか補足した方が良いかも

投稿日時 - 2007-10-02 21:31:50

補足

本当すいません、本当ありがとうございます。
厚かましいかもしれませんが、もう少し具体的にお伺いしてもいいでしょうか・・・。
さっきのスクリプトのGeckoのところだけに、
location.replace("index2.html");
alert(navigator.appVersion+"\n"+navigator.userAgent);
とつけるのでしょうか?それとも、Mac/Safari、IE、その他も指定して、それぞれに上記のように
付け足して、alertのテストで確認するのでしょうか?

ちなみに、さっきのスクリプトにMac/Safari、IEを足してみたのですが・・・

if(navigator.appVersion.indexOf("win") != -1)
{
document.write();
else if(navigator.appVersion.indexOf("Mac") != -1)
{
if
{(navigator.userAgent.indexOf('Gecko/')!=-1)
document.write();
}
else if
{(navigator.userAgent.indexOf('AppleWebKit') != -1)
location.replace("index2.html");
}
else if
{(navigator.appName == 'Microsoft Internet Explorer')
location.replace("index2.html");
}
else
{
location.replace("index2.html");
}
}

で大丈夫でしょうか?
Dreamweaverで作成しているんですが、document.writeとかは色が紫や緑の字になるけど、
locationという文字は普通のテキストで表示されるんですが、これは問題とは関係ないんでしょうか?
replaceだけを使った方がいいのでしょうか?
本当、聞いてばかりで申し訳ありません。この疑問が晴れたら、
後はどこが間違っているのか、を調べながらひたすら試してみようと思っています。

投稿日時 - 2007-10-02 22:10:52

ANo.1

>下記スクリプトの間違い
それじゃとりあえず整形してみよう
(このサイトの特性上、整形は全角空白)

//------------------
if(navigator.appVersion.indexOf("win") != -1)
{
 document.write();
 else
 if(navigator.appVersion.indexOf("Mac") != -1)
 {
  if
  {
   (navigator.userAgent.indexOf('Gecko/')!=-1)
   document.write();
  }
  else
  {
   location.replace("index2.html");
  }
 }
//------------------


括弧「{}」の対応がおかしいよ。

if(){document.write();else if(){

if()document.write();else{if(){
これが正しく機能するか判りにくい場合は明確に「{}」で区切った方が判りやすいし間違いが減ると思う

if(){document.wirte();}else{if(){

else if の中にあるifも括弧の位置がおかしいね
if{()document.write();

if(){document.write();

投稿日時 - 2007-10-02 19:55:55

補足

SAYKAさん、ご回答ありがとうございます!
スクリプトの訂正だけじゃなくて、{}の対応まで教えてくださって・・・。
本当に、ありがとうございます。
自分の物と見比べて、自分の間違いすぎにげんなりですが、早速書き直して
サーバーにあげてチェックしてみました。
(色々試していたので返信が遅くなって申し訳ありません。)

WindowsのFirefix、Opera、IEではスクリプトが実行されていました。
でも、MacはIE、Safariしかチェックしていませんが、両方ともindex.htmlを読みに行ってしまっています(泣)。
間違いがないかよく見て2回目を試してみたんですが、駄目でした。

これを回避する方法はMac/Safariへの対応、Mac/IEへの対応も記述したらいいのでしょうか?
その場合、SAYKAさんの直してくださったスクリプトの8行目のGeckoの指定の後に
else if・・・と続けて記述したらいいのでしょうか?

投稿日時 - 2007-10-02 20:51:36

あなたにオススメの質問