- - PR -
AJAX の タブコンテナ タブパネルを使用している時に WINDOW.OPENを使う
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-27 16:42
VISUALSTUDIO2005 + AJAX WEBEXTENSIONKit
にて、開発を行っております。 AjaxのTabContainer(タブコンテナ)を使用しまして、 複数のタブパネルを用意しました。 その各タブにGridViewを設置、その複数の中のタブパネルの ある項目のデータより、ボタン押下で、任意の詳細データを ポップアップWINDOWにて、表示しようと考えております。 問題は、ポップアップをjavascriptのwindow.openで出力した 後に、起こります。親のタブパネルのタブ表示が崩れてしまうのです。 具体的には、全てのタブが非アクティブ状態になり閉じてしまいます。 但し、表示はタブ部の部分のみが非アクティブとなっており、もともと 開いていた、タブは表示されています。 再度、GridViewのソートを掛けた時のみ、親のタブ表示は元に 戻ります。 ​http://www.atmarkit.co.jp/fdotnet/dotnettips/565aspajaxtabs/aspajax...​ などを参照しているのですが、 ちょっと調べて、 __VIEWSTATE" id="__VIEWSTATE" __EVENTVALIDATION" id="__EVENTVALIDATION" の変化を調べるのがポイントという記述があったので、(検討違い かもしれませんが) ポップアップ出力前の親のタブコンテナのHTML と ポップアップ出力後の親のタブコンテナのHTML と 出力後にある項目で正常ソート時の親のHTML を比較しました。 __EVENTVALIDATION" id="__EVENTVALIDATION" value="… __VIEWSTATE" id="__VIEWSTATE" value="… 変化したのは上ののvalue以降の箇所でした。 また、当然ですが、ポップアップ出力後のHTMLには ポップアップ出力のjavascriptが書かれている点が出力前、正常ソート後と異なります。 <SCRIPT LANGUAGE='javascript'>if(!window.open('./ポップアップ系.aspx','self','width=800,height=600,left=300;top = 200;toolbar=no,resizable=yes,scrollbars=yes')) { location.href = './ポップアップ系.aspx' ;}</SCRIPT> vbのスクリプトはこんな感じです。 Public Function WebpopupEvent2(ByVal Form As System.Web.UI.Page) As Boolean Dim St As String St = "<SCRIPT LANGUAGE='javascript'>" 'windowblock時 St &= "" St &= "if(!window.open('" & "./POPUP.aspx" & "','_blank','width=800,height=600,left=300;top = 200;toolbar=no,resizable=yes,scrollbars=yes')) {" 'St &= " location.href = './POPUP.aspx' ;}" St &= "alert(""ポップアップブロックがされています。CTRLキーを押しながら再度クリックしてください"");" St &= "</SCRIPT>" Form.Response.Write(St) End Function どなたか、ヒントでもありましたら、是非ご教授いただけますと、 幸いに存じます。 | ||||||||
|
投稿日時: 2009-02-27 22:11
あまり検証などはしていないので、勘で申し訳ないのですが、
Form.Response.Write(St) で出力しているのが関連していそうな気がします。 startupscriptなり、bodyのOnload属性追加なりでjavascriptを追加した場合はどうなるでしょうか? | ||||||||
|
投稿日時: 2009-02-28 01:35
>デューン様
ご回答誠にありがとうございます。 確かに、popupを呼び出された瞬間でしたので、呼び出すタイミングが違うと 結果が変わるかもしれないという期待を抱いております。 ClientScript.RegisterStartupScript("FocusScript", St.ToString()) このような記述をして、javascriptをstartupscriptで起動しようと考えましたが、 引き受けるRegistarscriptが無いというエラーが出ていまして、ちょっと、 RegisterStartupScriptの使用法を調べてみます。 あと、bodyonload 属性からの起動も明日試してみます。 ありがとうございます。結果も分かり次第報告いたします。 | ||||||||
|
投稿日時: 2009-02-28 17:13
デューン様
>startupscriptなり、bodyのOnload属性追加なりでjavascriptを追加した場合はどうなるでしょうか? やはり、body onload="popupdetail" という形でも RegisterStartupScript("startup", St) という形で、javascriptを作動させましたが、やはり、windowがpopupで開くタイミング で、全tabの状態が非アクティブ、非選択状態になりました。(タブ部分のみ) ちなみに、VS2008のOPERA環境で、同処理をしましたが、popup時の親windowのタブの非アクティブ化は起こりませんでした。 VS2005+AJAX+EXTENSION で IE6 の環境時におきるようです。 今のところ、HyperlinkFieldのリンクからtarget _blankで新規windowでリンクを 開くという逃げ道を考えておりますが、HyperlinkFieldイベントはリンクを たどるのみで、処理は行えないようなので…… 必要な情報をURLで送らなければならないのが悩みです。。。 | ||||||||
|
投稿日時: 2009-03-01 02:55
ちなみにVS2008+IE6や、VS2005+AJAX+EXTENSION+Operaの環境ではどうなりますか? 原因切り分けには、開発環境かブラウザのどちらかは揃えた方がいいと思います。 参考までにwindow.openではないですが、alertの場合はイベントの途中で後続のレンダリングが先に処理されいイベントの発生順序が狂うということがありました(IE6で) あとは、正常に表示できているときにスクリプトレットのような形で window.openしたらどうなるか 具体的にはアドレスバーに
と打ち込んでその状態になるかどうか。 それでも事象が起きるのであれば、どうしてもなってしまう事なのかもしれません。 問題が起きている状態のHTMLソースも確認してみると、何か原因が探れるかもしれませんね。 |
1