あなたはこれほど恥ずかしい思いをしたことがあるのではないでしょうか:
フォームやWindows統合認証など、Cookieを利用したページ認証を行っている場合、以下の操作を行うと認証に失敗し、認証(ユーザー認証情報)が失われ、ログインが必要となる場合があります。再度
システムが正常にログインした後:
最初のページ (PageA.htm): window.showModalDialog() の後、2 番目のページ (PageB.htm) がポップアップします
2 番目のページ (PageB.htm): window.open() の後、ポップアップ ウィンドウ (PageC.htm) がログイン ページにジャンプすることがあります
これは、異なるプロセスに異なるページが存在するため、ID 情報が同期されず、認証が失敗することが原因であるはずですが、MS コンサルタントの助けを借りて、最終的に次の方法を見つけました。
要約すると、showModalDialog() のときに、オブジェクトパラメータとして window を PageB.htm に渡します。PageB では、このパラメータを open() に使用することで問題は解決します。
詳細は次のとおりです。
-- ----------PageA.htm---------------
...
var obj = new Object();
obj。 myTestWindowA = window;//このウィンドウをオブジェクト パラメータに保存します
window.showModalDialog("PageB.htm",obj,"");
...
-------- - ------------------------
----------PageB.htm---------------
...
var obj = window.dialogArguments;//パラメータを取得前のページ
obj.myTestWindowA.open("PageC.htm");//前のページから渡されたパラメータを使用して次のページを開きます
...
------ - -------------------------
テスト後、アイデンティティの損失はなくなり、完了です。
注意深い友人なら、そのような操作により PageC.htm で問題が発生することに気づくでしょう。オープナーは PageB.htm ではなく PageA.htm であるため、window.opener は PageB.htm との通信に使用できず、open() Iオブジェクト パラメータを再び渡すことができなくなりました。パニックになってください。
幸いなことに、JavaScript ではオブジェクトは大きな木であり、その枝に何でも吊るすことができます。そのため、PageC.htm が PageB.htm と通信できるように、PageB.htm を次のように変更しました。 -----------PageB.htm--------------
...
var obj = window.dialogArguments;//前のパラメータを取得しますページの
var obj.myTestWindowA.myTestWindowB = new Object();
obj.myTestWindowA.myTestWindowB = window; //PageB のウィンドウを PageA のウィンドウ ブランチの下に移動します
obj.myTestWindowA. PageC.htm");//前のページから渡されたパラメータを使用して次のページを開きます
...
------ --- -------------
このようにして、getElementById など、PageC の window.opener.myTestWindowB を通じて PageB ページのオブジェクトと通信できます。 ("TextBox1").value="OK"
1. これは単なる状況である可能性があります。最初に ModalDialog を開いてから表示すると、ID 情報が失われる可能性がありますが、問題なくウィンドウを次のページに移行できる限り、問題は発生しません。解決できる。
http://www.ourac.net/read.php?tid=45123&fpage=2を参照してください) 2.
http://support.microsoft.com/default.aspx?scid=kb;EN-US;196383を参照してください。