メインのページとメインのページを開くと、連動して開く「小ウインドウ」の2つを準備しています。


メインのページには、「小ウインドウ」を開くために、以下のjavascriptを挿入しています。
<script type='text/javascript'>
<!--
self.name="MainWindow";
window.open('http://www.oxox.info/little.html', '_blank', 'width=150,height=600,scrollbars=yes,resizable=yes,status=yes');
// -->
</script>

さて、「小ウインドウ」はブラウザーが、ある特定のCookieを持っていれば、開く。持っていなければ「小ウインドウ」を開かない(または、開いてもすぐ閉じてしまう)という条件分岐をさせたく思っています。

これをjavascriptでは、どのように書けばよいのでしょうか?

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2010/10/02 08:38:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:windofjuly No.4

回答回数2625ベストアンサー獲得回数1149

ポイント18pt

【確認1】aaa= の部分を OXOX= に書き換えてますか?

 

【確認2】目的ページと同じサイト(サーバー)にテスト用ページを置いてテストしてますか?

クッキーはパソコン内に保存されますが、サイト毎にアクセス制限がかかってますので、

テスト用ページをパソコン内に置いたままでテストしても目的ページが保存したクッキーは利用できません

従いまして、テスト用ページも目的ページと同じサイト(サーバー)に置いてからテストしなければなりません

 

【確認3】本当にクッキーは格納されていますか?

回答2の中に記した下記部分はクッキーの中身をそのままブラウザ上に表示させて確認するためのものです

ブラウザ上にOXOX=を含む文字列が出力されていないとすれば、クッキーが保存されていないか、もしくは、

テスト用ページをサイトにアップロードせず、パソコン上で動かしたかというような事が原因と考えられます

    <script type="text/javascript">
    <!--
    document.write(document.cookie);
    //-->
    </script>
id:ozaki

ご回答、ありがとうございます!

どうもご教示いただきました、<【確認2】目的ページと同じサイト(サーバー)にテスト用ページを置いてテストしてますか?>が原因のようです。

ただ、これは理由があって、別々のサーバーにしか置けないものなのです。困りました・・・。

2010/10/01 17:21:41

その他の回答5件)

id:tukihatu No.1

回答回数180ベストアンサー獲得回数32

ポイント19pt

こうすればいいのではないでしょうか(クッキー読み取り部分は結構適当です)

開くopen命令の前で分岐させます。

メインページ

<script type='text/javascript'>
<!--
self.name="MainWindow";
cookiedata = document.cookie.split("keyname=");//keynameはクッキー名

//分岐文
if(cookiedata.match(/^name/)){//nameは特定のCookie数値
window.open('
http://www.oxox.info/little.html', '_blank', 'width=150,height=600,scrollbars=yes,resizable=yes,status=yes');
}
// -->
</script>

子ウィンドウ…特になにも書かない

id:ozaki

さっそくのご回答、ありがとうございます。質問が言葉足らずだったようです。特定のクッキーは、クッキー名は同一ですが、そのクッキーが保有している個別の情報はユーザーによって違います(会員制のサイトですので、ログイン認証に該当のクッキーを使っているためです)。

そこで、ご回答いただいたものを、特定のクッキーがあれば開く(なければ開かない)と変更する場合は、どのような書けばよいのかご教示いただけますか?

2010/10/01 14:54:12
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント19pt
<html>
<head>
    <title>ウィンドウオープンのテスト</title>
    <script type="text/javascript">
    <!--
    // 手抜き例 aaaa= baaa= aaa=など全てにマッチしてしまうので注意が必要
    if ( document.cookie.match(/aaa=/) ) {
        window.open('http://www.oxox.info/little.html', '_blank', 'width=150,height=600,scrollbars=yes,resizable=yes,status=yes');
    }
    // 着実な例1 aaa にのみマッチ
    var cookiedata = document.cookie.split("; ");
    for(var i = 0 ; i < cookiedata.length ; i++) {
        if ( cookiedata[i].match(/^aaa=/) ) {
            window.open('http://www.oxox.info/little.html', '_blank', 'width=150,height=600,scrollbars=yes,resizable=yes,status=yes');
            break;
        }
    }
    // 着実な例2 aaa にのみマッチ
    var cookiedata = document.cookie.split("; ");
    for(var i = 0 ; i < cookiedata.length ; i++) {
        var d = cookiedata[i].split("=");
        if ( d[0] == "aaa" ) {
            window.open('http://www.oxox.info/little.html', '_blank', 'width=150,height=600,scrollbars=yes,resizable=yes,status=yes');
            break;
        }
    }
    //-->
    </script>
</head>
<body>
    <h1>クッキーの中身</h1>
    <script type="text/javascript">
    <!--
    document.write(document.cookie);
    //-->
    </script>
</body>
</html>
id:ozaki

ご回答に感謝しています。

ただ、どの回答も実際にやってみると、目的を果たすことはできませんでした。

多分私の質問の仕方が悪いのかもしれません。いただいた回答の中に「クッキー名」という部分がありましたが、目的のページでは、すでにクッキーがブラウザーに入っていることが前提となっています。そして、クッキーは

setcookie("OXOX",$userID,ime()+3600*24*90,"/");という命令文で、ブラウザーに送られているようです。

("OXOX",$userID,ime()+3600*24*90,"/")の内、OXOXだけが共通で、他は固有の別々のものです。

今回は、このOXOXを手かがりに、条件分岐で、ページを開いたり、開かなかったりさせたいのですが・・・。

引き続き、ご教示をどうぞよろしくお願いいたします。

2010/10/01 16:37:29
id:tukihatu No.3

回答回数180ベストアンサー獲得回数32

ポイント18pt

>特定のクッキーがあれば開く(なければ開かない)

その場合は分岐文を変更すればよいと思います。

<script type='text/javascript'>
<!--
self.name="MainWindow";
//keynameはクッキー名

//分岐文(keynameが存在していて、かつ値が入っている場合)
if(document.cookie.match(/keyname=[^;]/)){
window.open('
http://www.oxox.info/little.html', '_blank', 'width=150,height=600,scrollbars=yes,resizable=yes,status=yes');
}
// -->
</script>
id:ozaki

ご回答に感謝しています。

ただ、どの回答も実際にやってみると、目的を果たすことはできませんでした。

多分私の質問の仕方が悪いのかもしれません。いただいた回答の中に「クッキー名」という部分がありましたが、目的のページでは、すでにクッキーがブラウザーに入っていることが前提となっています。そして、クッキーは

setcookie("OXOX", $userID,time()+3600*24*90, "/");という命令文で、ブラウザーに送られているようです。

("OXOX", $userID,time()+3600*24*90, "/")の内、OXOXだけが共通で、他は固有の別々のものです。

今回は、このOXOXを手かがりに、条件分岐で、ページを開いたり、開かなかったりさせたいのですが・・・。

引き続き、ご教示をどうぞよろしくお願いいたします。

2010/10/01 16:36:35
id:windofjuly No.4

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント18pt

【確認1】aaa= の部分を OXOX= に書き換えてますか?

 

【確認2】目的ページと同じサイト(サーバー)にテスト用ページを置いてテストしてますか?

クッキーはパソコン内に保存されますが、サイト毎にアクセス制限がかかってますので、

テスト用ページをパソコン内に置いたままでテストしても目的ページが保存したクッキーは利用できません

従いまして、テスト用ページも目的ページと同じサイト(サーバー)に置いてからテストしなければなりません

 

【確認3】本当にクッキーは格納されていますか?

回答2の中に記した下記部分はクッキーの中身をそのままブラウザ上に表示させて確認するためのものです

ブラウザ上にOXOX=を含む文字列が出力されていないとすれば、クッキーが保存されていないか、もしくは、

テスト用ページをサイトにアップロードせず、パソコン上で動かしたかというような事が原因と考えられます

    <script type="text/javascript">
    <!--
    document.write(document.cookie);
    //-->
    </script>
id:ozaki

ご回答、ありがとうございます!

どうもご教示いただきました、<【確認2】目的ページと同じサイト(サーバー)にテスト用ページを置いてテストしてますか?>が原因のようです。

ただ、これは理由があって、別々のサーバーにしか置けないものなのです。困りました・・・。

2010/10/01 17:21:41
id:kebo987654 No.5

回答回数38ベストアンサー獲得回数10

ポイント18pt

>> 特定のクッキーは、クッキー名は同一ですが、そのクッキーが保有している個別の情報はユーザーによって違います

とのことですので、"OXOX"がクッキー名ということになります。

他の方の回答のクッキー名の部分を OXOX に置き換えれば希望の動作になると思います。


あと、コメント欄をオープンしていただけると気軽に書き込めるので助かります。

id:hanako393 No.6

回答回数1142ベストアンサー獲得回数87

ポイント18pt

|ただ、これは理由があって、別々のサーバーにしか置けないものなのです。困りました・・・。

ローカルにWEBサーバーを入れればよいだけでは?

  • id:windofjuly
    うぃんど 2010/10/01 17:53:13
    クッキーを覗き見たりできないようになっているのはセキュリティ上の措置なので、これは破れず、代替手段はありません
    (この約束事を破られてはクッキーが安心して使えないものとなってしまいます)
     
    目的ページ(あるいは目的のサーバ)のほうに、クッキーが保存されているかどうかを出力するスクリプトを組み込むことが出来れば、
    それを取得するというような手も使えそうな気もしますけれど、実績が無いので何とも言えないところですし、
    別々のサーバーに置かなければならないという状況下では、もともと無理な話なのかもしれません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません