2007年04月10日

リンクを新しいウィンドウで開く

とある事情で今までGETで遷移してた画面をPOSTに変更した。
しかし、色々なQueryパラメータのパターンがあり、クリックされたリンクによって、パラメータの値を変えなければいけないなど、普通にPOSTには変えられない。
そこで、formの内容をJavaScriptで自動生成しsubmitするようにした。テストもたくさんやった。大丈夫!…のはずが、「リンクを新しいウィンドウで開く」の登場です。
つまり、今見ている画面はそのままに、別ウィンドウや別タブでリンクのページを開く事ができなくなっていたのです。普通にhrefにjavascript:hogehoge…と書いていたので、別ウィンドウではそんなJavaScriptの関数はもちろん存在せず、恥ずかしながらページが見つかりません、なのです。

まず最初はGETをPOSTに置き換えてSubmitするだけのページを間に挟む実装に変えてみた。一見うまくいった様に見えたが、普通の遷移で「戻る」「進む」ボタンが使えなくなっている事に気づく。考えてみたら当たり前だ。戻っても強制的に進まされるのだから。
しかしこの方法しか思いつかず、セッションにトークン情報を持って、location.back()やforward()を場合分けして呼んでみたりして、強引に制御してみた。
結果は、こちらを立てれば、あちらが立たず。というか感触として本質的ではない気がした。違和感がありすぎる。しかしなかなか諦めきれずに、あぁでもない、こうでもないと何時間も考え込んだ末、ギブアップ。

周りの人たちに「こりゃダメだ」「できない」と愚痴をこぼし始めたそのとき、神が降りてきました。

まず別ウィンドウで開きたい人にはPOSTは諦める。それでは、強引にPOST化した時の目的は達せられないのだが、ほとんどの人は同じウィンドウで移動していることだろう。そして諦めたことによって、AタグのhrefにGETのURLを、onclickにPOSTのJavaScriptコードを書いてはどうだと閃いたのです。つまり、

<a href="nextpage?a=b&c=d" onclick="nextpage(a=b&c=d);return false;">リンク</a>

こういう事です。上々でした。

投稿者 iwazawa : 2007年04月10日 01:23 | トラックバック
コメント

なるほど。
こんなことできるのか。

Posted by: mega : 2007年04月10日 12:59

はい。ただ、JavaScriptで強制的にPOSTするのも考え物だなと思いました。

Posted by: iwa : 2007年04月10日 16:24
コメントする









名前、アドレスを登録しますか?