プロが教えるわが家の防犯対策術!

<body onload="kansuu()" onunload="kansuu()" onbeforeunload="kansuu()">
</body>

javascriptでkansuuを呼び出すタイミングがイマイチ分かってません。

1回更新ボタンを押せば3つのイベントハンドラが動くのですが、上記のように実行すると実行結果はunbeforeunloadのせいでページが2度更新されてしまいます。

onsubmitにreturn falseがあるようにページを2度更新をしないでonbeforeunloadを実行できるのでしょうか。

あと、kansuu()をいじらずにbody内で処理できるものなのでしょうか。

分かる方ぜひ教えてください

A 回答 (5件)

onloadは画面の表示が終わったタイミング。


画像等があればそれが完全に表示されたら実行されるわ。
(画像が壊れていたら壊れたとこまでの表示)

unloadは現在のページから切り替わるタイミング。
onbeforeunloadはunloadの直前よ。

kansuu()が何しているのかわからないので
2回更新とか意味不明だけど
実行タイミングは上の通りよ。

2回実行されるのが嫌なら
フラグでも立ててやればいいと思うわ。

これ以上は情報不足で何も語れないので
必要ならもっと情報プリーズ。

この回答への補足

すいません説明不足で

調べてみたら、onunloadイベントはあるHTMLの表示を終了して別のページへ移るときに生じるという記述がありました。

HTMLの表示を終了して別のページに移らない方法を教えてください。

2度実行されるというのは1回目がunloadが実行されて2回目が別のページに飛ぶという意味で記述しました。

コレだけで分かりますでしょうか。

補足日時:2009/03/06 16:38
    • good
    • 0

んもう。



この問題実は
onunloadとかダメなんじゃないの?
そんな気がして来たわ。
だから78種類のうちの50種類でって書いてあるのよきっと。
おおもとのHTMLを書き変えない限り無理だと思うわ。
    • good
    • 1
この回答へのお礼

これを見て思いました。ムリであるとw
今日、無事50種類達成できました。
1つ(onload)でも十分理解出来ましたし、少しだけjavascriptの知識が増えました。

ありがとうございます。助かりました。

お礼日時:2009/03/08 00:40

うーん


onloadはiframe使えば余裕だけど
onunloadとかはどうやって呼ばせるつもりなのかしら。
ちょっと答えが興味あるわ。
    • good
    • 1
この回答へのお礼

ありがとうございます。iframeを使ってonloadが実行できました。

onunloadの場合はonunload='kansuu();false'を使ってみました。
結果は別のページに飛びますか?の表示が出るようになったのですが、
falseのままOKボタンを押したら別のページ(更新)に移ってしまいダメでした。

また何か分かればレスいただけると嬉しいです。

お礼日時:2009/03/07 02:22

いまいち何をするのか分からないけど


なんだか面白そうね。

<html>
<body onunload="location.href=location.href;">
<a href="http://www.google.co.jp">ぐーぐる</a>
</body>
</html>

一応こんな風にすれば
リンク「ぐーぐる」をクリックしても
延々同じページを表示し続けるようになるわよ。
もっともその謎解きで有効かどうかは分からないけど。

とりあえず今のとこはこんな感じかな

この回答への補足

お答えいただきありがとうございます。
謎解きのページの公開は原則禁止されておりますが、質問掲示板での投稿を試みましたがいい返事はいただけませんでした。
あまり、方法としてはよくありませんが自作で改良したのをほんの少しだけ公開します。
どうすればよいのかご指導お願いします。

http://www10.atpages.jp/nobolc/a.html

補足日時:2009/03/06 21:13
    • good
    • 0

何をしたいのかまったくが判らないわ。


隣にいて見てあげれば判るのかもしれないけど
正直なところ
・あなたが何を作ったのか
・何を目標としているのか
・どうなってしまっているのか
この3つが欠片も判らないの。

とりあえずあなたの補足に対していくつか質問させていただくわね。
その1)
3つのイベントハンドラの実行タイミングは理解できた?
その2)
> HTMLの表示を終了して別のページに移らない方法
処理として別のページに移るような処理を組みこまなければいいのよ?
組み込んでいるってこと?
その3)
> 1回目がunloadが実行されて2回目が別のページに飛ぶ
onunloadとonbeforeunloadで同じ処理をしているてことじゃないの?
ページが移れば両方とも実行されるから
onunloadとonbeforeunloadで同じ関数を呼べば
理論上同じ処理が2回実行されるわ。


単純に考えると
onunloadとonbeforeunloadのどっちか片方だけにすればいいんじゃない?
て思っちゃうんだけど。
そういう問題じゃないのかしら。

この回答への補足

せっかく説明されてたのにどこまで理解できたか申し上げなくてすいませんでした。

>目標はonload、onunload、onbeforeunloadの同時実行です。
3つできれば申し分ないんですが、出来れば2つ以上の実行が望ましいです。

>何を作りたいのかというのには問いにはあるページの謎解きでして50以上のjavascriptイベントハンドラをそのページで実行しないとと次の問題に進めない仕組みになってるというわけです。

>次にどこまで進行してるかというとonload、onunload、onbeforeunloadの別々に単独で動かしてみる作業をしてみたんですが、onloadはonbeforeunloadは成功。onunloadだけは実行はされてるんですが、別のページに飛んでしまいます。

>1の質問に答えさせていただきますと
実行タイミングは先日のご説明で理解できました。ありがとうございます。

>2の質問は謎解きのページの中にswfファイル(実行ファイル)が組み込まれていて<body onunload="kansuu()">と打ち込むと成功しましたとアラート関数で表示されます。ですが、そのページにとどまって欲しいのに更新されてしまいます(別のページにとぶという言い方をしましたが更新されてしまうが正しいです)
すいません話が飛びましたが、
質問の答えは組み込まれたkansuu()がどういう仕組みで動いてるかということは謎解きのページなので隠されたままです。

>その3の質問 そうですね、単体では試しましたがその2つonunloadとonbeforeunloadの場合の実行は試してないのでなんともいえませんが、
おそらく2回更新されると思います。

全部の場合(3つ同時実行と単体実行以外)をまだ試してなかったので勉強になりました。早速試してみます。

補足日時:2009/03/06 18:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!