- PR -

各ブラウザによるリロード処理の違い

1
投稿者投稿内容
ritoh
会議室デビュー日: 2008/02/08
投稿数: 8
投稿日時: 2008-03-27 15:59
はじめまして
いつも参考にさせていただいてます。

WEBで以下のような画面を作っています。

・フレームAとフレームBがある
・フレームAには、a.jspを読み込む
・フレームBには、b.jspを読み込む
・b.jspには、フレームAをリロードする記述があります

jspファイルは以下のような内容です。

[a.jsp]
<% System.out.println("Enter [a.jsp]"); %>
<head>
<script>alert("a.jsp")</script>
</head>

[b.jsp]
<head>
<script>window.parent.frames["a"].location.reload();</script>
</head>


困っていることは、
・ブラウザによっては「フレームAが表示されないことがある」ということです。

具体的には
・IE7、Opera9では常に表示される
・Safari3.1、Firefox2.0では表示されないことがある
です。

Safari、Firefoxでの実行結果は、以下のようになります

表示される場合:
 ・パターン1
  コンソールにログ
   ↓
  ポップアップ
   ↓
  コンソールにログ
   ↓
  ポップアップ
   ↓
  (終了)
 
 ・パターン2
  コンソールにログ
   ↓
  ポップアップ
   ↓
  (終了)

表示されない場合、
 コンソールにログ
  ↓
 (終了)


※IE、Operaは常に"パターン1"または"パターン2"となります

実行結果を見たところ、
a.jspのリクエストを
サーバサイドで、サーブレットが実行されてから(t1)、
クライアントサイドで、そのレスポンスをロード(t2)する間に
b.jspによって更新がかけられると、処理がストップしているように見えます。


上記のような現象は、各ブラウザの実装の違いによるものなのでしょうか?
以上、長文になってしまい申し訳ありません。

※b.jspからフレームAの更新処理を除去することで回避することは可能ですが、
 ブラウザによる処理の違いなどの調査を目的としています。
ritoh
会議室デビュー日: 2008/02/08
投稿数: 8
投稿日時: 2008-03-28 10:42
自己レスです。

調査を続けていたところ、
ブラウザによってlocationを保持するタイミングが異なるのではないかと思い、
以下のようなテストをしてみました。


[a.jsp]←フレームA
<%
Thread.sleep(5000); // "b.jsp"の処理が完了するのに十分な時間待つ
%>


[b.jsp]←フレームB
<script>
var addr = window.parent.frames["A"].location; // フレームAのアドレス取得
window.parent.frames["A"].location.reload(); // フレームAをリロード
alert(addr);
</script>


■結果
・IE, Operaでは location に値が入っている
・Safari, Firefoxでは、値が入っていない(blank)

■考察
・IE, Operaはクライアントからリクエストが送信されたときにlocationを保持
・Safari, Firefoxはサーバからのレスポンスを受け取ったタイミングでlocationを保持

------------------------------
<Client>
ブラウザよりリクエスト // IE, Operaはここで保持?

<Server>
JSPをコンパイルしてサーブレット生成(初回のみ)

サーブレットで処理を実行

サーブレットがレスポンスを返す

<Client>
レスポンスの html をブラウザがロード // Safari, Firefoxはここで保持?

ブラウザに表示
------------------------------

という考えに行きいてしまったのですが、それを確認する資料が見つからないため推察の域を出ません。
このような内容の調査を行ったことがあるという方がいらっしゃいましたら、教えていただければ助かります。

以上、表題と違う内容になってしまい申し訳ありませんが、よろしくお願いします。

1

スキルアップ/キャリアアップ(JOB@IT)