dポイントプレゼントキャンペーン実施中!

初めて質問させていただきます。
よろしくお願いします。

HTMLでフレーム分割された画面を作成しています。
FrameSetの中で2つのFrameに分かれており、
一方のFrameの画面が表示された後に
もう一方の画面を表示するという仕様です。
一方のframeのsrcとなるHTMLのonloadイベントにて
javaScriptでもう一方の画面のURLを切り替えるという方法をとっていますが、
Windows2000のIE5.0で表示させた場合のみ、
IEが時々異常終了してしまいます。
(※外部公開向けシステムなので
基本的にはどのバージョンのIEでも
動くようにしておく必要があります)
下記にHTMLのソースの抜粋と
エラー発生時のWindowsイベントログを添付します。

エラーが発生する原因及び回避方法等ありましたら、
ご教授いただけませんでしょうか?
どうかよろしくお願いいたします。

(Frame親画面の抜粋)
<frameset rows="90,*" frameborder="yes"
cols="*">
<frame name="topFrame" scrolling="auto" src="A.cgi">
<frame name="bottomFrame" src="empty.html">
</frameset>
※empty.htmlは<body>の中が無いダミーHTML

(A.cgiによって作られるHTMLの抜粋)
<body onload="parent.bottomFrame.location.href='B.cgi';">
※サーバ側のログを見ると、
B.cgiのサーバ側処理は正常に終了しています。
※onloadイベントの処理をはずすと
異常終了しなくなります。

(サーバ側の動作環境)
OS:Solaris8
WEBサーバ:apache 1.3.27
CGI:Perl 5.005_03


(イベントログ)
イベントの種類: 情報
イベント ソース: DrWatson
イベント カテゴリ: なし
イベント ID: 4097
説明:
アプリケーション iexplore.exe がアプリケーション エラーを起こしました。
06/24/2005 14:30:16.182 にエラーが発生しました。 発生した例外: c0000005 アドレス 00000001 (<nosymbols>)

A 回答 (4件)

No3さんもおっしゃってますが、この段階ではとにかく論理的にテストを繰り返して原因(不具合が起きる条件)を探るしかありません。

onloadを外してみたら、とかb.cgi以外のファイルを読み込んでみたら、という案は、その条件を一つ一つ絞り込んでいく作業に他なりません。方法を工夫してでも、行うしかない事です。先の質問に回答しているので、b.cgiを遅らせる必要がある事情などはわかっていますが、この局面ではテストが必要な局面ですのでNo3さんが言ってる通り、同じ表示をする静的HTMLファイルを使ってでもテストはして下さい。テストなので完璧な動作に捉われる必要はなく、表示上(ブラウザに対する同一性)同一である事が重要です。とにかく、少しづつ状況を変えてテストを繰り返し、どのような条件であれば発生して、どこが違えば発生しなくなるのかを絞り込んでいくんです。この段階では「これは問題ないはず」という思い込みは間違いの元です。とにかくテスト、これしかありません。

onloadを使わない方法であれば、先の質問に対する回答で、フレーム定義ページでSESSION変数の保存等をする事で実現できます。JavaScriptも使わずに済みますし、この方が確実な処理かな、とは思います。
    • good
    • 0

全部提示するか、ご自分で調べるかどちらかです。


まずトラブルが起きているのですから
そのまま表示しているだけとか判断するのはやめましょう。
書き間違えとか知らなかったとか、
とにかく原因が特定できずに質問しているという事と
トラブルはとにかく起きているという事を重視しましょう。

で、まずはとにかく場所を特定しましょう。
それから出来れば単体テストをしましょう。
テストが出来ないならばそれは、正しく動く実績もないという事ですが、ご理解してますでしょうか。
(外部公開向けシステムならなおさらテストをしないと・・・)

A.cgiがサーバに出力すると思われる(予定されている)ファイルをテキストエディタでも作成してアップすれば良いだけのはずです。
その状態でブラウザにアドレス直でB.cgiを呼んでみればまずB.cgiの単体テストが出来ます。
他に
A.cgi を A.htm と CGI でなく HTML としてその HTML を
<body onload="parent.bottomFrame.location.href='C.htm';">
の様に HTML を置く様にしてみる。
これにより動作の流れが対応しているのかの検証が出来る。

これで問題がない場合は、CGIの処理(結果)に問題があると思われます。


尚、申し訳ございませんが
当方には IE5 の環境がないので
全ては知識等頭の中の事で
一切検証できていません。
(一応、IE6 で同等の調べ方のデモはしましたが・・・。)

意外とB.cgi が読む A.cgi の書き出す内容に想定外があったりして、
それにより不適切な JavaScript を含む内容を出力している可能性もあります・・・。
    • good
    • 0

アプリケーションエラーは厄介ですね。

IE5 アプリケーションエラーでgoogle先生に聞いてみると、JavaScriptのdate関数などでこれが出るようなケースは見つけたんですが・・・。

恐らくサーバー側の問題ではなく、クライアント環境の問題で間違いないと思います。そしてonloadイベントを外すと正常に動作するというのがポイントっぽいので、フレームで最初からB.CGIを指定してみたらどうなるのか、onloadイベントでb.cgiを呼ばずに別のページをロードしても起こるのか、など一つづつ条件を変えていけば、起こる特定の条件が絞り込めると思います。ある程度絞り込めた時点でgoogleなどを検索したりして、それでも解決しなければMSのサポートという事になるかと思います・・・が、IE5ってまだサポートされてたかな(^^;。

この回答への補足

ご回答ありがとうございます。
フレームで最初からB.cgiを指定するのがノーマルなパターンかと思っています。しかし今回、A.cgiがサーバ側に出力したファイルの内容を読み込みながらB.cgiの処理を行うため、両CGIがサーバ側で動作するタイミングをずらす必要があります。(サーバ側の仕様は、業務の都合上、変更不可)
onloadイベントの中でbottomFrameのlocationを変更する点に問題があるのでしょうか?(但しIE5のみ)
A.cgiが作るHTMLのonloadイベント以外に、bottomFrameの切り替えを行える方法があれば、ご教授いただけますでしょうか。
※ちなみにMSのホームページを見ると、IE5は既にサポート外みたいでした(涙)。

補足日時:2005/06/29 01:59
    • good
    • 0

B.cgiではどんなものが表示されるのでしょうか?ここがポイントのような気がするのですが。

この回答への補足

サーバ側のファイルから読み込んだ日本語文字列を
そのまま表示しているだけの単純なHTMLです。
<form>、<submit>、<table>タグなどもありません。
また、WEBサーバ側のCGIの処理ログを見ると、
CGIで上記のファイルを読み込んで
その内容をブラウザ側に返却する処理自体は正常に行われています。

以上、よろしくお願いいたします。

補足日時:2005/06/28 19:34
    • good
    • 0

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