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で質問しましょう!
似たような質問が見つかりました
- 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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
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>tableタグを入力不可にしたい。
JavaScript
-
10
ブラウザを閉じたときにログアウト処理を実行するには
その他(コンピューター・テクノロジー)
-
11
warファイルをEclipseでプロジェクトとして展開するには?
Java
-
12
window.openでタイトル名の指定
JavaScript
-
13
[Java] Edgeでのアドレスバー非表示について
JavaScript
-
14
[JavaScript] preventDefaultが動かない?
JavaScript
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
onbeforeunload時のwindow.open...
-
プリントスクリーンの防止について
-
ASP.NET(VB2005)■ WEBページ...
-
リンク先のJavaScriptを実行す...
-
ウインドウの後ろに隠れている...
-
window.onloadが、ブラウザ(Fi...
-
<a href="#" …>の意味を教えて...
-
cssにjavascriptを入れる?呼び...
-
別ファイルのfunctionの読み込み方
-
テキストをクリックすると答え...
-
iframeの中から親ページをスム...
-
bodyにidをつける理由は何ですか?
-
リンクに飛ばない・・・
-
javascriptファイルは1つに統...
-
<iframe>~</iframe>内のwindow...
-
外部からのjs呼び出しについて。
-
function の return 値を表示し...
-
「jQuery」アニメーションをル...
-
Dreamweaver で 外部JSを読み込...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
JavaScriptからVBScriptの呼び...
-
onbeforeunload時のwindow.open...
-
undefinedが表示されてしまう
-
ASPで取得した情報をscriptタグ...
-
datepickerで日付の値を取得したい
-
ウインドウの後ろに隠れている...
-
Vbscriptで自分自身のウィンド...
-
Java ScriptでIPによるアクセス...
-
「関数が定義されていない」と...
-
javascriptでtableの該当行を削...
-
Cygwinでログをのこす方法
-
確認ダイアログで「キャンセル...
-
showModalDialogで開いた画面か...
-
location.reload() について
-
<aタグで変数に文字を代入
-
iPhone Safariの戻るボタンの挙動
-
毎回、ページ読み込み時に1回...
-
<![CDATA[の意味がわからない
-
JavaScript関数呼出し元の要素...
おすすめ情報