
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.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() が発生すると迷惑スクリプトと受け止められるかもしれません。
ありがとうございます。
また、更新するような内容のページではなく、一度しか通らない画面ではあるので、
問題はないと想定しておりますが、今後注意しておきます。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
datepickerで日付の値を取得したい
-
確認ダイアログで「キャンセル...
-
ブラウザ上に表示されたデータ...
-
<aタグで変数に文字を代入
-
HTMLの<a>タグで、あるリンクを...
-
javascriptの記述方法について
-
JavaScriptからVBScriptの呼び...
-
<a href="#" …>の意味を教えて...
-
"mailtoでメールの【氏名】【性...
-
javascriptファイルは1つに統...
-
JavaScriptでiframeの内容を「...
-
スマホ上で、左右スワイプで次...
-
フォントの色指定を一部解除したい
-
インラインフレームをドラッグ...
-
更新日時を偽装したい。方法は...
-
サーバー上でJqueryが使用できない
-
ポップアップウィンドウの位置
-
同意を求めて、次のページに進...
-
JavaScript でキーを送る
-
インラインフレームで表示され...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vbscriptで自分自身のウィンド...
-
「関数が定義されていない」と...
-
ウインドウの後ろに隠れている...
-
noscriptについて
-
undefinedが表示されてしまう
-
JavaScriptからVBScriptの呼び...
-
JavaScriptってどんな使い方が...
-
location.reload() について
-
こんにちは、javascript初心者...
-
スクリプトエラーについて
-
onbeforeunload時のwindow.open...
-
指定したサイズでブラウザを開...
-
ブラウザ上に表示されたデータ...
-
<aタグで変数に文字を代入
-
動的に生成したscriptのエラー...
-
【js】attrで属性を取得する...
-
印刷時に消したいjavascriptがある
-
確認ダイアログで「キャンセル...
-
VBscriptでVisualBasicのような...
-
複数にasyncを指定した際の読込順
おすすめ情報