QA@IT

別ページで開いたウィンドウの有無の確認

7914 PV

現在、HTMLとJavaScriptを使用したプログラミング構築において
別ウィンドウで開いているページにある処理を反映させたいのですが、うまくできずに困っています。

まず、以下のページがあります。

PageA.aspx

<td class="image">
<a href onclick="if(win_closed(window.ABC))openwin(1)" >窓OPEN</a><br />
</td>

<td class="image">
<a href onclick="alert(win_closed(window.ABC))" >窓CHECK</a><br />
</td>

PageB.aspx

<td class="image">
<a href onclick="openwin(2)" >確認</a><br />
</td>

WinCheck.js

   function win_closed(winOj) {
        var ua = navigator.userAgent
        if (!!winOj)
            if ((ua.indexOf('Gecko') != -1 || ua.indexOf('MSIE 4') != -1)
               && ua.indexOf('Win') != -1)
                return winOj.closed
            else return typeof winOj.document != 'object'
            else return true
        }

        function openwin(obj) {

            ABC = window.open("", "ABC", "");
            if (obj == 1) {
                ABC.window.location = "../Redirect?pageName=1";
            }
            if (obj == 2) {
                ABC.window.location = "../Redirect?pageName=2";
            }
            if (obj == 3) {
                ABC.window.location = "../Redirect?pageName=3";
            }
            ABC.focus()
        }

PageAにある「窓OPEN」をクリックするとopenwin関数へ飛び、別ウィンドウでページが開きます。
「窓CHECK」をクリックすると、先ほど開いたウィンドウが存在しているときは「false」、
存在していないときは「true」とアラートを表示します。
(上記のウィンドウ有無判定関数は以下のページを参考にしました。
http://www.fureai.or.jp/~tato/DHTML/simple/part3/cross/winclosed.htm)

PageBはPageAから同ウィンドウ上でアクセスページであり、PageAと同様にクリックするとopenwin関数へ飛び、
別ウィンドウでページを開かせる命令を記述しました。

やりたいこととしては、PageAの「窓CHECK」をクリックすることで行えるウィンドウの有無の確認を
PageBから開いた別ウィンドウにも適用させることです。
PageBから別ウィンドウでページを開いた後にPageAに戻って「窓CHECK」をクリックした際に、
別窓でページを開いているので「false」というアラートを出したいのですが、
「true」と表示されてしまいます。

なお、PageBから別ウィンドウでページを表示させた後、PageAの「窓OPEN」をクリックしてから、
「窓CHECK」をクリックすると、「false」になります。
PageA、Page共に同じjsファイルアクセスさせ、なおかつアクセスするウィンドウのターゲットも同じにしているのですが、
何が原因かわからず、行き詰ってしまいました。

解決方法、アドバイス等ございましたら何卒ご教授願います。

開発環境:
Visual studio Premium 2010

  • window.openに指定したtarget"ABC"と、変数ABCを同一視されているような気がしますがこの二つは関係ありません。
    また、windowオブジェクトはPageAとPageBでは別のものです。それぞれPageA自身、PageB自身になります。
    -
  • そのためPageA上のwindow.ABCとPageB上のwindow.ABCも最初は別のものを指していることになります。
    この辺りの認識はよろしいですか?
    -
  • 今日改めて上記問題について調査したところ、異なるページでwindowオブジェクトを作成しても異なるものであるということが確認できました。上記問題については、クッキーやDOMを使用する方法があったのでそちらを試して解決できないか確認しようと思います。回答ありがとうございました。 -
  • PageAとPageBが同じウィンドウがから開かれていたり、PageBがPageAから開かれている場合にはwindow.parentをたどるなどする方法でも可能かもしれません(検証してないので最近だとセキュリティのためにちょっと面倒になっているかもしれませんが)。クッキー等の方法でダメな場合は追記などされると回答がつくかもしれません。 -
  • 一先ずDOMの使用で今回の問題については解決できそうです。window.parentを辿る方法についても知っておきたいので、自身で調査し、また分からなくなったらお世話になるかもしれません。回答ありがとうございました。 -
  • もし可能であれば時間のあるときにDOMでの解決方法を回答として投稿し、ご自分の回答に解決マークを付けてください。同じ悩みの人への参考情報となるかもしれませんので。 -

回答

了解しました。掲載用としてまとめるのに時間を要するかもしれませんが、DOMでの解決方法を投稿しようと思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。