none
master page内でのjavascript onunload RRS feed

  • 質問

  • いつもお世話になっております。

    Master page内でonunloadのjavascriptイベントを拾いたいと思っております。

    具体的には以下のことをやりました。

    1.vs 2010にてASP.NET Web  アプリケーションを生成

    2.master pageのhead句内に以下を記述

    *********************************************************

    <script language="javascript" type="text/javascript">
    //<![CDATA[

    function
    HandleClose() {

        alert("close");
       
    PageMethods.AbandonSession();
    }

    //]]>
    </script>

    <body onunload="HandleClose()">

    *********************************************************

    3.

    デバック実行しDefault.aspxを起動し、閉じるボタンを押す。

    私が思うに、alert messageが出ると思っていたのですが、

    でませんでした。

    自作のprojectを作成しても動かず、また、function HandleClose() {

    の上にalert("test")と記述するとこれは動きました。

    またDefualt.aspxに直接[2.]の記述をしたところ動作しました。

    これらを総合するとmaster pageではonunloadを扱えないという

    結論にたどり着いたのですが、あっていますでしょうか。

    もし、間違いでしたらどなたか 対応方法をご教授いただけませんでしょうか。


    2012年7月30日 15:10

回答

  • 手元で試してみたところ、Masterページを使った場合も直接Default2.aspxといったファイルに記述した場合も
    onunloadの中でalertを呼び出すことはできませんでした。
    HandleClose自体は呼び出されているのが確認できたので、onunload、つまり現在のウィンドウを消した後だと
    alertウィンドウ自体を表示できない、という状況になっているのではないかと考えています。

    なお、onunloadの変わりにonbeforeunloadを利用すると、Masterページを使っても、直接記述しても
    alertウィンドウを表示させることができました。

    ちなみに試したのはIE9です。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答としてマーク dgi dgi dgi 2012年8月2日 13:41
    2012年7月31日 0:51

すべての返信

  • > これらを総合するとmaster pageではonunloadを扱えないという
    > 結論にたどり着いたのですが、あっていますでしょうか。

    そういうことはないと思います。ASP.NET が生成する html コード
    を見比べて、どこか違うところがないか確認してください。

    2012年7月30日 22:45
  • 手元で試してみたところ、Masterページを使った場合も直接Default2.aspxといったファイルに記述した場合も
    onunloadの中でalertを呼び出すことはできませんでした。
    HandleClose自体は呼び出されているのが確認できたので、onunload、つまり現在のウィンドウを消した後だと
    alertウィンドウ自体を表示できない、という状況になっているのではないかと考えています。

    なお、onunloadの変わりにonbeforeunloadを利用すると、Masterページを使っても、直接記述しても
    alertウィンドウを表示させることができました。

    ちなみに試したのはIE9です。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答としてマーク dgi dgi dgi 2012年8月2日 13:41
    2012年7月31日 0:51
  • このままだと、ページ遷移のたびにJavascriptの関数が呼ばれてサーバーセッションがクリアされるような。。。

    2012年7月31日 5:16
  • 皆様ご返答ありがとうございます。

    小野@どっとねっとふぁんさま

     onbeforeunloadに変更したところ対応できました。

    かるあさま

     確かにおっしゃるとおりです。

    もともとですが、アプリケーションを終了された状態

    (特定のWebアプリケーションProjectからはずれた状態)で、ある情報をDBに保存したい

    と考えており上記の方法を考えておりました。

    ですが、確かにかるあさまのおっしゃるとおり 毎回callされるため、

    私の考えた解決案想定と違っておりました。。。

    別の方法を検討してみたく思います。

    2012年7月31日 15:02
  • > onbeforeunloadに変更したところ対応できました。

    Master Page を使用しているか否かで動作が違うという話はどう
    なったのでしょうか?

    それから、多分、以下のページを参考にしてコードを書いたと思
    いますが、この通り実装すれば、ページを閉じるまたは別のページ
    に遷移するたびにサーバー側の AbandonSession 静的メソッドが
    呼び出され、セッションが破棄されるので、onunload のままでも
    目的は果たせるのではないですか?

    Calling a Page Method when the Browser Closes
    http://stackoverflow.com/questions/1091622/calling-a-page-method-when-the-browser-closes

    2012年7月31日 17:39
  • SuferOnwwwさま

    ご返答おそくなり大変申し訳ありません。

    Master Page を使用しているか否かで動作が違うという話に関してですが、結論としてはMaster Pageを

    使用しても動作の確認ができました。

    (onunloadの記述部にスペルミスがありました。)

    >それから、多分、以下のページを参考にしてコードを書いたと思
    >いますが、この通り実装すれば、ページを閉じるまたは別のページ
    >に遷移するたびにサーバー側の AbandonSession 静的メソッドが
    >呼び出され、セッションが破棄されるので、onunload のままでも
    >目的は果たせるのではないですか?

    はい。上記に関してもおっしゃるとおりです。

    再度onunloadでも稼動するかどうか確認をしてみたく思います。

    2012年8月2日 13:41