個人的メモ。HTMLとJSの話。
もしかしたら、知ってる人にとっては「当たり前じゃん」って話かもしれませんが、少なくとも私は今日まで気づかなかったのでメモ。
基本的にはHTMLでウィンドウをパタパタ開くのはよろしくない訳なんですが、システムによっては、新規ウィンドウだかを使わざるを得ない(使った方が便利)ってことはよくある。
んで、たとえばA.htmlからB.htmlを、aだかwindow.openだかで新規ウィンドウつかって開いた時、新規ウィンドウ(B.html)から、親ウィンドウ(A.html)に対して命令したいことってのは、まぁ普通にあるわけです。
ところが、B.htmlのハンドラをSWFとかに持たせた場合、JSによるwindow.openerってのは、環境によって警告がでちゃう。
そうなると、親(A.html)ウィンドウにウィンドウ名が割り振られていない場合、B.htmlからA.htmlに命令が出せなくなっちゃうわけです。
良くあるパターンとしては、自身をリロードして書き換えちゃうとかってのがあるけど、フォームとかがあるとリセットされたりしがち。
これ、一瞬迷ったんですが、あっさり解決。
実は今日まで使ったことがなかったんですが、ウィンドウ名は上書きできるんですな。
たとえばこんな風。
this.window.name='newname'
これを、onloadだかB.htmlを開くときのJavascriptスキームの中だかfunctionだかで使えば、A.htmlはリロードせずに、自身のウィンドウ名を書き換えることができ、B.htmlのswfから「getURL("c.html","newname","POST");」とか指定してやれば、警告とかも出ないのでよさげ。
あ、ちなみに最後の"POST"は本来いらないんだけど、ブラウザによってはこれをつけないとうまく動作しないときがあるらしい。ヨウスケ氏に聞いた。
あと、ローカルではSWFからのターゲット指定はちゃんと動かないっぽい。サーバーに上げたらちゃんと動くけど。
==========
と、チラ裏的メモ。
本当は複数のウィンドウやJSに頼るシステムってのは、アクセシビリティやユーザビリティに問題があるってことなんだけど、なんせ想いの通りには仕事は進まない。
この仕組みも環境依存の可能性だってあるし、第一JSをOFFられてたら動かないわけで。
でも、普段JSは出来るだけ使わない主義の私にしてみたら、けっこう知らないことっていっぱいあるんだなーという反省みたいな感じで、残しておく気になった。です。はい。
0 件のコメント:
コメントを投稿