スポンサー広告 - スポンサーサイト

--/--/-- (--) --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【プログラミング】その他 - IEのバグ 其の参

2013/03/10 (日) 21:58

またしても発見したのでメモ。

シチュエーションとしてはこんな感じ。
①フレームで構成されたサイトをお気に入りに登録。
②お気に入りから①で登録したサイトを選択して表示する。
③①で登録した画面が表示されない。
となる場合があります。
発生した時の状況は、上下に2分割されたフレームのサイトで、上のフレームの内容が下のフレームにも表示されてしまっていました。
要するに、上下のフレームに上のフレームの内容が表示されていました。
が、必ず発生するわけでもないようです。
調べたところ、こんな情報が。

IE8(RC1)でフレームが正しく表示されないバグがある?

読むとなかなかひどいですね。
どうやらIE8に固有の症状のようです。
実際にtakが遭遇したのもIE8でした。
上記の情報はかなり古いものですが、つい最近発生しました。
マイクロソフトの人は直す気は無い感じですねぇ。

察するに、お気に入り用のファイルの生成でやらかしている感じです。
一旦お気に入りから消して再度登録し直せば回避できるので、実際の仕事の運用ではサポートの人にはその旨を伝えておけば良いですかね。

それにしても、ここの所立て続けで遭遇するIEバグ。
ビジネスではまだまだ古いIEが幅を利かせているので困ったものです。

[2013/05/05 追記]
どうやらIEのバグというわけではないかもしれない。
意図的に再現できたので記録しておく。
以下、再現条件。

①Struts2を使用している
②フレーム分割している
フレームを構成するベースとなるHTMLでは、
・上部フレーム:上部のフレームを表示するURL(HeadAction)
・下部フレーム:下部のフレームを表示するURL(BodyAction)
が指定されている。
③上部フレームにはformタグが1つ存在する。
④formタグのaction属性は、上部のフレームを表示するURL(HeadAction)となっている。
⑤formタグの中にはsubmitが2つある。
⑥submit(A)が押されたときのformタグのtarget属性は、上部のフレーム(自身のフレームを更新)
⑦submit(B)が押されたときのformタグのtarget属性は、下部のフレーム(下部のフレームを更新)
※⑥⑦はJavaScriptでonclick時に動的に変更している
form関連のタグはstrutsタグで生成している

初めてベースとなるHTMLに遷移してきたときは、問題ない。
この状態でブックマークに登録すれば、期待通りになる。
フレームを構成するベースとなるHTMLでは、
・上部フレーム:上部のフレームを表示するURL(HeadAction)
・下部フレーム:下部のフレームを表示するURL(BodyAction)
となっているからである。

が、この状態でsubmit(B)を押下すると、下部のフレームを表示するURLが、
上部のフレームを表示するURL(HeadAction)になる。(④がその理由)

Struts2の機能により、formタグのaction属性に指定されているActionが起動するのではなく、
submitのname属性の値で起動するActionが決定するためである。
そのため、上部のフレームを表示するURL(HeadAction)でも、
実際に動くのは下部のフレーム用のBodyActionになる。
画面の見た目は正しく上下のフレームで別々の画面が表示されるが、URLは上下のフレームで同じになっている。

この状態でブックマーク登録を行うと、
フレームを構成するベースとなるHTMLでは、
・上部フレーム:上部のフレームを表示するURL(HeadAction)
・下部フレーム:上部のフレームを表示するURL(HeadAction)
となり、ブックマークからの起動ではURLに指定のActionが起動するため、
いざブックマークからの起動すると、上下のフレームに同じものが表示されるということになる。

複数submitの場合、formタグのaction属性の値は、起動するActionを指定するものでは無くなる。
ただし、存在するクラスとメソッドを指定する必要はあるっぽい。
が、フレームで構成され且つ、targetが交差するような場合では、考慮が必要である。

上記の場合では、
(1)⑥⑦のときにaction属性の値を適宜変更する
submit(A)の時は、上部のフレームを表示するURL(HeadAction)
submit(B)の時は、下部のフレームを表示するURL(BodyAction)
(2)formタグ自体を分け、複数submitを止める
この場合は、action属性の値のActionが起動する。
のどちらかで対応可能だろう。(他にもありそうだが、さくつと思いつく範囲ということで)

ブックマークの仕組みはブラウザに依存するので、このお話はIE限定でのこと。
IEではフレームのサイトを登録すると、書くフレームに表示ししているURLをそれぞれ保持するようです。
他のブラウザではベースとなるHTMLのURLだけを保持する物もあるようです。

Webアプリは考慮することが多くて大変だ。
関連記事

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。