window.open()の第二引数でwindowに名前をつけることができる。そして、Documentのbodyに疑似的に作成したformを追加して…そのformをsubmitしてpostする(送信が終わったらformタグを削除)…この時にwindowにつけた名前をformのtarget属性に指定してpostすると…うまくいく。
これ、なかなかトリッキーな感じがするのですが、今もそんなやり方を使っています。
getだと送信上限があるからpostで…というのはメールアドレスがUTF-8だと受信できないメールサーバがあるというのと同様にもう過去のことになっているようです(ほぼ無視していい)が、まあそれでもやたら長いURLというのはおじさんに嫌われるでしょう(ふつうにwikipediaとかgoogleやmicrosoftのメディアなんかは以上に長いですが)それでもpostでやるのがスマートだという認識が広くある気がします。あとgetだとURLエンコードしないといけないとか、リファラも長くなり情報パクられるとか、いろいろあるから無自覚に使うのは今も昔もタブーであり続けることでしょう。
まあそれはともかく、、、
コード的にformを作ってpostするというのがダサいので何とかしたいのですが、$ajax()というかバックにあるxhrでの送信時にtargetは指定できないのでしょうか?(調べていない)ブラウザが生成したWindowsに通信結果を返すという情報は持たせたほうがいいと思いますが…ただまあコールバックした結果をformでpostしなおせばいいか?いやでもそれは無意味だ…だったら最初にformでpostすればいいだけだ。
やはり、スマートではない。
Webブラウザの小窓生成とformタグ送信は結構な頻度でいまだに使う手法だと思いますが、これについてのベストプラクティスはあるにせよ…コードがいけてないということの解消はおざなり感というものがあると思うのは私だけでしょうか。(そもそも、そんなことを解消することを期待するのがおかしい(というかどうでもいい)のかもしれませんが)
コメント