プロが教える店舗&オフィスのセキュリティ対策術

ASP.NET で作成された Web ページ内の __doPostBack 関数についての質問です。
以下のコード(抜粋、左端は行数)において、以下の点が不明ですのでお教え願います。

Q1. 11 行目の記述は何のために必要なのでしょうか?
もし、9 行目での theForm オブジェクトの取得が失敗した場合に、11 行目が必要になる
というのであれば、最初から 11 行目のみ書いておけばよいと思うのですが。

Q2. 14 行目の if 文の条件について、どちらか一方だけでは何故ダメなのでしょうか?

1 <form name="aspnetForm" method="post" action="Details.aspx" id="aspnetForm">

2 <div>
3 <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
4 <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
5 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(略)" />
6 </div>

7 <script type="text/javascript">
8 <!--
9 var theForm = document.forms['aspnetForm'];
10 if (!theForm) {
11 theForm = document.aspnetForm;
12 }
13 function __doPostBack(eventTarget, eventArgument) {
14 if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
15 theForm.__EVENTTARGET.value = eventTarget;
16 theForm.__EVENTARGUMENT.value = eventArgument;
17 theForm.submit();
18 }
19 }
20 // -->
21 </script>

A 回答 (1件)

バージョンによる違いを吸収するための施策だと


思います。
バージョンによってどちらかしか反応しないことが
想定されているのではないでしょうか?

たとえばQ1については11行目ですべてが包含されるなら
問題ないですが、実際には11行目でこぼれる分がある
ため、11行目のみを書いてそれを補完するために
9行目を書くということになるでしょう。
    • good
    • 0
この回答へのお礼

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

なるほど、ブラウザのバージョン差異の吸収が考えられますね。
具体的にどういった場合に必要とされるコードなのか、バージョン差異の観点から調べてみようと思います。

お礼日時:2006/09/09 16:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!