onbeforeunload時のwindow.openが効かないのですが…
ページ内に設置した「閉じる」ボタン、またはブラウザの「閉じる」を押したときに、
新規ウィンドウが立ち上がるようにしたいのです。
複数台でテストすると、半数が新規ウィンドウが立ち上がりません。
まずIEでunloadが効かない場合がある事から、
以下サイトよりonbeforeunloadのスクリプトを引っ張りました。
http://blog.moxiecode.com/2008/04/08/unload-even …
で、
<SCRIPT LANGUAGE="JavaScript">
~上部省略~
function unload() {
//alert('Unload event occured.');
window.open('test_b.php');
};
</script>
<body onbeforeunload="unload()">
と記述したのですが、
前述で新規ウィンドウが立ち上がらなかった台が、
アラートだと出すのですが、window.openに反応しません。
何か解決方法はありますでしょうか。
javascriptに関して全くの初心者ですので、四苦八苦しながらテストしています。
もし解決方法をご存じの方はソース例を教えて頂くと大変助かります。
宜しくお願いします!
No.1ベストアンサー
- 回答日時:
onbeforeunloadを知らなかったので調べてみました。
return で適当な文字列を返す必要があるようですね。
onBeforeUnload の挙動について: 脳外記憶装置
http://konnichiwa-dou.cocolog-nifty.com/blog/200 …
IEでのonBeforeUnload の挙動 | Inside ASCADE
http://inside.ascade.co.jp/node/58#
window.onbeforeunload でも良さそう。
ただ、確認ダイアログが出る前に windowopen() が発動するので、キャンセルを押し続けるとウインドウが増殖します。
window.onbeforeunload = function(){
window.open('test3.html');
return 'sample';
}
あと、(on)beforeunload は少なくともDOM-level2で定義されていないので、ブラウザによっては動かないと思います。(Fx3.6では動作しました)
http://www.y-adagio.com/public/standards/tr_dom2 …
ありがとうございます!
window.onbeforeunloadで
新規ウィンドウが立ち上がらなかった台でも
動作しました!
希望していた仕様から考えると、問題がないのでひとまずこちらでいこうと思います。^^
質問からすぐに回答頂きましてありがとうございます!
No.2
- 回答日時:
#1です。
DOM level3でも unloadbefore は定義されていないようですね。
Document Object Model (DOM) Level 3 Events Specification
http://www.w3.org/TR/DOM-Level-3-Events/
あと、beforeunloadについて別にやり方で実装している方もいらっしゃいました。(やってることは同じなんですけどね)
----------
<script type="text/javascript">
window.onbeforeunload = function(event){
event = event || window.event;
return event.returnValue = '移動しようとしてるよ!';
}
</script>
自分自身をロードするときにフレーム解除してロードしようとするサイトをフレームで開くときの抑制方法 - blog.katsuma.tv
http://blog.katsuma.tv/2008/12/beforeunload_hand …
----------
応用すると、イベントリスナでも実装できるようです。(IE8, Fx3.6で確認)
<script type="text/javascript">
window./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'beforeunload', function (Event) {
Event.returnValue = '遷移しますか?';
}, false);
</script>
javascript:ページ遷移時に確認を出して、キャンセルしたら、遷移しないということをしたいと考えています。 window.addEventListener('beforeunload', function(){ if (ex.. - 人力検索はてな
http://q.hatena.ne.jp/1168612418
No.3
- 回答日時:
#1,2 です。
何度も済みません。
> まずIEでunloadが効かない場合がある事から、
ちょっと気になったのですが、IEでunloadが効かないというのはどのような状況でしょうか?
<script type="text/javascript">
window./*@cc_on @if(@_jscript) attachEvent('on' + @else @*/addEventListener(/*@end @*/ 'unload', function (Event) {
alert('unloadします');
}, false);
</script>
上はIE8で動作しています。
実際のソースを見れば、修正点がわかるかもしれません。
あと、今更ではありますが、unload も beforeunload も
・リンクをクリックする
・ページを更新する
というイベントでも発動する点に留意しておいてください。
更新する度に、window.open() が発生すると迷惑スクリプトと受け止められるかもしれません。
ありがとうございます!上記ソースも試してみます^^
>上はIE8で動作しています。
>実際のソースを見れば、修正点がわかるかもしれません。
01.function fixUnload() {
02. // Is there things still loading, then fake the unload event
03. if (document.readyState == 'interactive') {
04. function stop() {
05. // Prevent memory leak
06. document.detachEvent('onstop', stop);
07.
08. // Call unload handler
09. unload();
10. };
11.
12. // Fire unload when the currently loading page is stopped
13. document.attachEvent('onstop', stop);
14.
15. // Remove onstop listener after a while to prevent the unload function
16. // to execute if the user presses cancel in an onbeforeunload
17. // confirm dialog and then presses the stop button in the browser
18. window.setTimeout(function() {
19. document.detachEvent('onstop', stop);
20. }, 0);
21. }
22.};
23.
24.function unload() {
25. alert('Unload event occured.');
26.};
27.
28.window.attachEvent('onunload', unload);
29.window.attachEvent('onbeforeunload', fixUnload);
上記ソースでアラート部分をwindow.openにし、
bodyでonbeforeunload="unload()"と呼び出しました。
上記の場合IE6,7,8で動作する台としない台があり、
ブラウザのバージョンで動かない、という感じではなかったので
困っていた次第です。
>更新する度に、window.open() が発生すると迷惑スクリプトと受け止められるかもしれません。
ありがとうございます。
また、更新するような内容のページではなく、一度しか通らない画面ではあるので、
問題はないと想定しておりますが、今後注意しておきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- Visual Basic(VBA) Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。 2 2022/04/27 11:29
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- 英語 会話で両者認識している名詞にも関わらず不定冠詞を付ける用法について 7 2023/06/16 14:50
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
JavaScriptで ブラウザの閉じるを無効化に
JavaScript
-
ブラウザの×ボタン(閉じるボタン)押下時のイベントをひろいたい
JavaScript
-
onload onunload onbeforeunloadのタイミング
JavaScript
-
-
4
ブラウザの右上にあるボタンを消すには?
HTML・CSS
-
5
window.open(about:blank")"
JavaScript
-
6
ブラウザの×(閉じる)ボタンのイベントを拾いたいのですが
Java
-
7
Javascript_submit()完了後に処理したい
JavaScript
-
8
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
9
同じページをブラウザで複数開けないように
JavaScript
-
10
window.openでタイトル名の指定
JavaScript
-
11
<JavaScript>tableタグを入力不可にしたい。
JavaScript
-
12
ブラウザを閉じたときにログアウト処理を実行するには
その他(コンピューター・テクノロジー)
-
13
なぜ sftp には ASCIIとBINARYといったモードがないのでしょうか?
その他(コンピューター・テクノロジー)
-
14
[JavaScript] preventDefaultが動かない?
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウインドウの後ろに隠れている...
-
Cygwinでログをのこす方法
-
jquery uiが動かない
-
フォルダ名の取得方法
-
showModalDialogで開いた画面か...
-
javaからcgiの呼び出し
-
Vbscriptで自分自身のウィンド...
-
onbeforeunload時のwindow.open...
-
PrintScreenキーを無効にしたい
-
JavaScript関数呼出し元の要素...
-
javascriptでbgmを自動再生する...
-
undefinedが表示されてしまう
-
<aタグで変数に文字を代入
-
Java ScriptでIPによるアクセス...
-
文字を入れ替わり表示させたい...
-
Google scriptについて 至急scr...
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
別ファイルのfunctionの読み込み方
-
(Javascript)印刷するファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
JavaScriptからVBScriptの呼び...
-
onbeforeunload時のwindow.open...
-
Vbscriptで自分自身のウィンド...
-
ウインドウの後ろに隠れている...
-
javascriptでtableの該当行を削...
-
Cygwinでログをのこす方法
-
Java ScriptでIPによるアクセス...
-
確認ダイアログで「キャンセル...
-
showModalDialogで開いた画面か...
-
ASPで取得した情報をscriptタグ...
-
JavaScript関数呼出し元の要素...
-
datepickerで日付の値を取得したい
-
文字を入れ替わり表示させたい...
-
毎回、ページ読み込み時に1回...
-
location.reload() について
-
曜日ごとにリンク先を変えるJav...
-
window.onloadイベントの任意実...
-
undefinedが表示されてしまう
-
ブラウザの「戻る」ボタンを押...
おすすめ情報