ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

WEBサイト制作勉強会コミュの質問:onUnloadイベントで(JavaScript)

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。入会直後に質問て、ずるい気がしますが、困っているので、ヒントだけでもいただけると助かります。


JavaScriptを用いて、クライアントマシン上で、とあるデータを作成しています。

作業中に、とあるAというページに移動しようとしたとします。
その時、クライアントマシンで作業してた情報を一度サーバーに保存してから、Aというサイトにリダイレクトしたいと思っています。

ページが切り替わる瞬間はonUnloadで取れるので、必要な情報をフォームにいれ、onSubmitを発生させて、サーバにデータを保存する・・・そこまでは問題ないのですが、保存処理後に、飛ばす先のAというサイトのアドレスが分からず困ってます。

現在は、
1.onLoad時に、全てのdocument.all.tags("A")に対して、onclickイベントを割り振る
2.onClickイベントが発生した際、event.srcElementのhrefをフォームの隠しフィールドBに入れて、submitイベントを発生させる
3.サーバ側の保存処理終了後、隠しフィールドBのアドレスにリダイレクトさせる

といった、かなり強引な処理を行っています。

何とか動くのですが・・・
直接、アドレス欄にURIを入力した時、
とか
ブラウザの進む、戻るを使った時、は、上記の方法で、移動先サイトAのアドレスを取得することは出来ません。

onUnload時に、ページ切り替え先のアドレスが取得できれば一番いいのですが・・・


質問です。
1.ページ切り替え先のアドレス取得は可能でしょうか?
2.できないとしたら、代替手段としてどのようなことが考えられるでしょうか?

尚、ソースはIEで動作すれば問題ありません

コメント(7)

お疲れ様です。

入会直後の質問でも全然かまわないと思うというか、むしろ歓迎しますが、せめてルールを一読してください。
読み終わったら、このトピを目次トピに追加しておいてください。


で、質問の件ですが、後で調べますw
切り替え先のアドレスが取得できるか、もしくはできないということが判別できればいいんですよね?

代替手段は、他のページに移動する前に、一時保存ボタンを押すことを運用で強制するとか、でしょうかw
データ入力用アプレットなどに変更して、常に自動で保存させるとか?
仕様が見えないので、何がOKで何がNGかがわからないので適当ですが。。。
読み終わりました。すいません、こういうルールがあったのですね。申し訳ないです。こんなに、きっちりと動いてるコミュがあることに感動しました。

さて


アプレットではなくて、JSPでDB保存してます。


ぶっちゃけ書くと、
ブラウザ上で付箋を作成してます。
私の作品ではありませんが、雰囲気としてはこんなかんじです。
http://slavadev.sourceforge.jp/cgi-bin/wema.cgi#javascript


DIVタグにcontentable=trueで文字を書き込み、onmousedown、onmousemove等で、その付箋を自由に移動させる、という感じです。

クライアントマシン上で、その付箋内が修正されたり、移動されたりしても、DBには反映しませんね。当たり前ですが、保存するためのサーバサイドのプログラムを動かすことになります。

サーバに保存するタイミングですが、
1.ユーザが保存ボタンを押下した時
2.別ページに切り替わった時
3.ブラウザが終了された時

を考えています。

最初は、1だけでいいと思ってたのですが、使ってるうちに、ページ移動した場合も自動で保存してほしい(保存ボタンの押下を忘れる人が多い)という事になったのです。

それで、onLoad時にAタグ全てにonclickを割り振り、ハイパーリンクをクリックした時に、event.srcElement.hrefを取得。そして、onUnload時に、各付箋要素とともに、先ほど取得したアドレスをサーバに投げる、という処理を行いました。

かなり強引ですが、そんな事をしなくても、onUnload時の飛び先予定アドレス?を取得する方法ないかなぁ、と。

質問は、その方法があるか、無いか、
と、私が、回りくどい方法をとってリダイレクト処理を行ってますが、もっとスマートな別の方法があったら、ヒントで構わないので教えていただきたい、ということです。
お疲れ様です。

とりあえず、きっちり動かしていくことを目標にがんばってますw


さてさて、内容は概ね理解しました。

手元に本が無いので、本当かどうかは調べられていませんが、アンカーでない場合の予定アドレスは拾えない?かもしれませんね。。
アンカーのアドレスは拾えてるのですから問題ないでしょうが、直接入力の場合はどっから拾うんだろう。。。
document.links[0]とかだめかな。。。



で、新しいヒントってゆうか、試せればって感じなのですが、submit処理を呼び出した後、それを無視するようにはできないですかね?
要は投げ捨て?
サーバにデータを投げた後は、その結果を無視して、後続の処理はそれぞれのイベントにまかすようにするみたいな。
そうしたら、リダイレクトのために次のURLを送らなくていいし、onClickやwindow.closeとかにも対応できそうな気がするんですが。。

いずれにせよ、もうちょい調べて出直してきます。。。
>submit処理を呼び出した後、それを無視するようにはできないですかね? 要は投げ捨て?
>サーバにデータを投げた後は、その結果を無視して、後続の処理はそれぞれのイベントにまかすようにするみたいな。
>そうしたら、リダイレクトのために次のURLを送らなくていいし、onClickやwindow.closeとかにも対応できそうな気がするんですが。。

投げっぱなし・・・に出来るのですか?
JSPで書いてる箇所なんですけども、保存のJSPに飛ばさないと、データはDBに保存されないですよね。
他に方法あるのかもしれませんが、小生ちょっと思いつかないです。
formのtargetを指定して、そっちの窓の中で、保存処理をして、最後に
window.opener=true;
window.close();
で、閉じてみる、といった形や、フレーム幅0のものを作って、そっちでサーバ側の保存処理をするとか、そういう方法はあるかもしれませんね。


お手を煩わせるのは、申し訳ない、と、試しにlinks[0]を取得してみたのですが、document内の最初のlinkが取得されますね。links[links.length-1]も、document内ですね。
まぁ、document.links[n]である以上、document内なのは当然といえば、当然なんですけどね・・・

投げっぱなし、といえば、XMLHttpRequest を使えないかな?と思ったりしたのですけど、どうでしょうかね?
XMLHttpRequestって、非同期リクエストって言われてますよね?このトピックを見てて、ふとこの方法を思い出したのですけども、残念な事に自分XMLHttpRequestを試した事ないんですよ。
googleMapでajaxが流行った時に、興味もったまま保留になってるんですよね。XMLHttpRequestってどうですかね?



XMLHttpRequest関連
http://www.hawk.34sp.com/stdpls/xml/xmlhttprequest.html
http://d.hatena.ne.jp/higepon/20050601
http://web.paulownia.jp/script/xmlhttp.html
自己レス

自分でも調べていたのですが、onUnloadイベントで、次に表示されるべきページのアドレスを取得するのはムリそうですね。

XMLHttpRequestについては引き続き検討続けたいと思います。
まぁ、大筋完成してるんで、この箇所に関しては優先度が低いのですが、他システムでも、使えるネタになると思うので、時間のあるときに検証作業を継続していこうと思います。

何か分かりましたら報告いたします。

また、何かご存知の方、アドバイスでも、ヒントでもいただけると幸いです。
お疲れさまです。

やっぱりダメなんですかねー。
俺も探してみたんですけど、だめっぽいです。。。

XMLHttpRequestについては微妙なとこですかね?
やらんとすることは同じですし、、、、
てか、それならこっち使ったほうが面白いか?w

誰かもっとJavaScriptに強いヒトいませんかね。。。
サーバサイドのプログラムに強い方は結構いても
JavaScriptは微妙ですよね(苦笑

デザイナさんとの役割分担も微妙ですし。
そもそも、ローカルの環境依存激しいですし。

企業内イントラでのWebアプリでは結構要求されますが、JavaScript得意な人って少ない。
イベントの扱い方も、なんか微妙だし(苦笑

ajax絡みが最近熱いので、JavaScriptも奥が深いもんだなぁ、と思ってる今日このごろ。

らきさん、そのほか、直接、自分の日記にコメントくださったり、メッセージくれたりした方、ありがとうございます。

XMLHttpRequestとか、いろいろ試行錯誤していこうと思います。
もし、何か分かったら、本トッピックスにもフィードバックしていきます。

この質問の為に、本コミュに入りましたが、今後ともよろしくお願いいたします。自分で、分かる話であれば、他のトピにも参加していきたいと思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

WEBサイト制作勉強会 更新情報

WEBサイト制作勉強会のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング