親ページのあるボタンを押すと、子ウィンドウが表示され、その子ウィンドウで認証を行ってから、親ウィンドウに次のページを表示させたいと思っています。
今試している方法はJavaScript(window.open)を使用し、開いた子ウィンドウでASPを使用して認証を行う方法です。
認証はうまくいくのですが、認証している間に親ページに次のページが表示されてしまいます。
色々試しているのですがうまくいきません。
このようなことをするのは不可能なのでしょうか?
どなたかお分かりになる方がみえましたら教えてください。
No.1ベストアンサー
- 回答日時:
ちょっと一ひねりすると出来そうです。
親を[A] と [C]。子供のウインドウを [B] とします。
[A] - window.open -> [B] - 承認 -> [C]
としたいのですよね?
ここで、別ページ [D] を用意します。
[A] - window.open -> [B] - 承認 -> [D] - 承認確認 -> [C]
こんな流れにします。
[D] はページの内容を表示せずに、
[B] の承認が完了したことを待ちます。
例えば、クッキーを使って [D] に [B]の状態を知らせても良いでしょう。
他にも方法はあります。
[D] は、[B]からの信号が来るのをひたすら待ちます。
信号がやってきたら、
[C]を呼び出すか、[A] を呼び出すか判断を行い、
ページ遷移を行います。
ポイントは、[D] をはさんで [B] を待つ。
と言う部分です。
ただし、ブラウザが閉じられる可能性もあるので、
[B] は一定時間(一定回数ループするまで。。。かも知れない。)たったら、
[A] へ遷移する。と言うロジックが入っていた方が良いでしょう。
お答えいただき、ありがとうございます。ひとつページを新たにはさむという発想はでてきませんでした。
早速この方法を試してみたのですが、うまくいきません。
Dが信号をまつという状態を下のようにループを使ったのですけど、この方法は間違っていますか?ASPが混ざっています。
<%
For i=0 TO 100000
ID=Request.Form("id") ←Bからフォームで送られる
PW=Request.Form("passwd")←上に同じ
If ID="administrator" And PW="abc" Then
%>
<html>
<body>
次のページを表示、フォームで情報を送る処理
</body>
</html>
<% Exit For
End If
Next
%>
ループをしている間に、Bから情報が送られてくるのをまつというようにしましたが、うまく情報を受け取れないようです。タイミングの問題でしょうか?
この他にもBが閉じられたという情報をwindow.closed(JAVAScript)で得ようかとも思いましたが、ASPと混在させることはできませんよね?
この他にも信号を待つ方法はあるのでしょうか?
ご迷惑でなければ教えてください。
No.5
- 回答日時:
#1 です。
[B]の構造を良く理解していないのですが、
[B]は[D]を呼び出しているのでしょうか?
そうでないと、
> ID=Request.Form("id") ←Bからフォームで送られる
> PW=Request.Form("passwd")←上に同じ
は、意味が無い様な。。
[B]から[D]を呼び出すなら、環境変数の内容を引き渡せますが、そうで無いと消えてしまう様な気がします。
クッキーを使って渡すか、GETパラメータを作って[D]を呼び出すか。
が良い様な気がします。(安全性を考えると、パラメータかな。ただし、容易に想像ができない様にしないと、安全性の低下に繋がります。クッキー容認であればクッキー渡しの方が、簡単確実です。当然[D]はクッキーを削除する処理が必要ですが。)
[B]が閉じられた情報を取得する事ってできないと思います。
[D]の方でタイムアウトを意識されるのが良いかと。
と、ここまで書いて考えたのですが。。。
[B]はID, PASSを入力したら、チェックを行わずに、[D]を呼び出す様にするのも良いですね。
ID, PASSチェックを[D]にやらせてしまえば、[D]側でのタイムアウト処理は不要ですね。
クッキー渡しにせずに、単にパラメータ渡しで行けますね。
[B]は[D]を呼び出すフォーム文と、自分自身をクローズする処理をいれれば良いかと。JavaScriptで遣らせればできそうですね。
早速のご回答ありがとうございます。
説明不足ですみません。
BはDを呼び出して?いません。BはDに値をフォームで渡したあとに閉じられます。DはAが表示されているウィンドウに表示されます。
つまり、2つのウィンドウがあって、表示される順は
A→→→D(Bから送られてきた値を元に認証)→C
B(Aから開かれ、値をDに送り、閉じる)
という感じです。うまく図がかけないのですが・・・。
No.4
- 回答日時:
ベーシック認証が使えるのならばそれでやれば簡単ですが。
.htaccessを使う認証方式です。
Javascriptで行うのだったら、
親ウィンドウに空白のダミーページ
(又は「読み込み中」など書かれたページ)
から、子ウィンドウをだして、
子ウィンドウの認証が通ったら親ウィンドウを切り替えれば見た目はそうなりますね。
お礼を申し上げるのが遅くなり、申し訳ございませんでした。ベーシック認証についてよく理解していないので、調べてみようと思います。
ありがとうございました。
No.3
- 回答日時:
これまで他の方が紹介された方法とは別に、
2つの方法が考えられると思います。
1.IE専用の対応としてshowModalDialogを利用する
InternetExplorerのJScriptにある、showModalDialogを
使って子ウィンドウを表示し、認証完了後に
親ウィンドウを次のページに遷移させる。
(社内システムなどのクライアント環境が特定できる
場合に有効)
子ウィンドウをモーダルダイアログにできる
(親ウィンドウの操作を無効にできる)ので、
特別な実装を不要にできる。
2.子ウィンドウからの通知を待ってから次ページに
遷移する
ANo.1の提案されたものに近いのですが、[D]を作成
しない方法です。
(1)親ウィンドウの全てのフォーム要素を無効にする
(2)親ウィンドウから子ウィンドウを表示(window.open)する
(3)子ウィンドウの認証結果を親ウィンドウに通知する
(4)親ウィンドウの全てのフォーム要素を有効に戻して次のページに遷移する
の手順になります。
ANo.1の方がご指摘の子ウィンドウを閉じられる問題
は、子ウィンドウ側のbodyタグのonunloadイベント
ハンドラを利用すれば回避可能にできます。
(親ウィンドウの全てのフォーム要素を有効/無効に
切り替えられるのは、親ウィンドウがフレーム分割
されていないことが条件になります。)
お礼を申し上げるのが遅くなり、申し訳ございませんでした。window.openではうまく動作しなかったので、showModalDialogを使用してみようと思います。
ありがとうございました。
No.2
- 回答日時:
#1 です。
少し間違えました。
最後の、
> [B] は一定時間(一定回数ループするまで。。。かも知れない。)たったら、
> [A] へ遷移する。と言うロジックが入っていた方が良いでしょう。
は、
[D] は一定時間(一定回数ループするまで。。。かも知れない。)たったら、
[A] へ遷移する。と言うロジックが入っていた方が良いでしょう。
です。申し訳ない!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- X(旧Twitter) Twitter(X)でプロフィールを変更したら、突然「ページの読み込みに失敗しました」と表示され、一 2 2023/08/26 17:00
- 電子マネー・電子決済 WAON一体型イオンカードを作ろうとしています。 4 2022/10/19 06:07
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- Windows 10 (続き)2つのウィンドウ選択時の表示について 6 2023/08/13 15:05
- gooポイント gooポイントをdポイントに交換できない。 3 2022/04/22 20:39
- Gmail 携帯電話を使わず Google の二段階認証を登録できる? 2 2023/03/29 21:56
- PDF PDF閲覧で 各ページの特定部分だけを表示する方法はありますか? 例えば 右下のページだけを確認した 2 2023/02/27 16:01
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- Word(ワード) Microsoft Word2023で、修正箇所を表示させたい 1 2023/02/09 10:07
- 電子マネー・電子決済 Apple Payウォレットにクレジットカードを登録、認証済みなのに使えません 今まで自分のiPho 1 2023/01/25 15:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
goo は、放置?
-
htmlの文字が縦書きになる
-
WEBページを強制的に横画面で見...
-
テーブルの行を折りたたみたい...
-
css初心者 フレックスボックス...
-
HTML電卓で1文字消す方法
-
HTMLですCSSです 画像のように...
-
テーブルタグのセルの幅の一部...
-
WEBサイト 画像の直接リンクに...
-
CSSについて教えてください。 ...
-
青い枠のみのHTML
-
HTMLです 店主のこだわりという...
-
HTMLです 四角みたいにして中に...
-
初心者html・CSS ウィンドウを...
-
12月のカレンダーを表すHTMLを...
-
pythonに自分で作ったHTMLを、...
-
HTMLです次の意味を持つ要素ま...
-
アコーディオンメニューが思う...
-
スマホ(android)のタッチパネ...
-
HTMLの CSSのファイルというの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
テーブルの行を折りたたみたい...
-
htmlで<form>~</form>を並べて...
-
WEBページを強制的に横画面で見...
-
コードを書いて下さい( ; ; )...
-
css初心者 フレックスボックス...
-
テーブルのセルデータを自動改...
-
CSSデータの作成方法について(...
-
HTMLで画像をポップアップで表...
-
メモ帳の段落の揃え方
-
スマホ(android)のタッチパネ...
-
HTMLで特定の文字だけ色を変え...
-
プログラミングの勉強が進みません
-
スマホでHTMLファイルを開いて...
-
テーブルタグのセルの幅の一部...
-
CSSでつくったメニューのアニメ...
-
大至急。webのシングルページを...
-
角丸画像の背景色を透明にした...
-
HTML入門でもう躓いてしまった。
-
HTMLの CSSのファイルというの...
おすすめ情報