質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

2099閲覧

ページを閉じると発生するポップアップイベントの実装について

ryu01212008

総合スコア26

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/05/01 06:46

前提・実現したいこと

ページ離脱イベントの実装を目標にしています。
下記のコードでポップアップが表示されたり,されなかったりという問題が発生しています。
具体的には下記を参照ください。

発生している問題

・ ファーストビューで即ページを閉じた場合、イベントが機能せずポップアップが表示されません。 ・ 一番下までスクロールしてページを閉じようとした場合、初めてポップアップが表示されます。

該当のソースコード

JavaScript

1$(function() { 2 // ★ページ離脱ポップアップ広告 3 $(window).on('beforeunload', function() { 4 //window上でページを閉じると.opが表示される 5 $(".op").show(); 6 return ('ページ移動を確認します'); 7 }); 8});

html

1<div align="center"> 2 <div class="op" style="display: none;"> 3  <span class="close">×</span> 4  <p>ポップアップ表示内容</p> 5 </div> 6</div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vapordog

2018/05/01 06:57

$(function はページがロードされ終わるまで始まらな無いので、ロード完了までbeforeunload イベントへの登録が行われません。試しに$(function(){})の中ではなく、外に$(window).on($before...を書いてみてはどうでしょうか。可能性の一つであることと、外でもちゃんと実行されるか確認していないので、こっちにかいてしまいました
ryu01212008

2018/05/01 07:11

試しに$(function(){})の中ではなく、外に$(window).on($before...を書いてみたのですが、今までと変わりませんでした・・・。
guest

回答1

0

ベストアンサー

このイベントが windowのリソースがまさにunloadする時、実行します。この時まだdocument(Webページ)はそのまま見えて残っている状態で、イベントがキャンセル可能な状態です。

即閉じで実行されないのは画面がロード中でイベントがキャンセルされたためです。
要は、仕様ですね。

beforeunloadはform送信時も発生したり、
あまり使い勝手が良いとは言えないので、要件に合わせてやり方を考えた方がいいかもしれません。

投稿2018/05/01 06:58

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryu01212008

2018/05/01 07:15

mts10806さん 回答ありがとうございます。 実は、ポップアップの中にはメルマガの登録を促すformを設置したいと考えています。 参考サイトを拝見させていただきましたが、 $("input[type=submit]").on('click', function(){ $(window).off('beforeunload'); これで制御できることはわかったのですが、window.onbeforeunloadの使用では希望を満たさないので、 他にページを閉じるときにポップアップを表示できるようなJavaScriptはありますでしょうか?
m.ts10806

2018/05/07 02:27 編集

うーん。 onbeforeunloadを使う場合でもできないことはないですけどね。 メインコンテンツを非表示にしておいてwindow.loadのタイミングで「表示」に切り替えておけば、余程HTML総量がよほど大きいページでない限りはユーザーは待てると思いますし。 「ページを閉じる」という操作自体がユーザー心理的な観点からするとあまり深追いされたくないと思うので、別の導線を考えた方が良いかもとは思います。
x_x

2018/05/07 07:46

この場合、引用するのは「Note」の部分じゃないですかね? ただそれも日本語版は何言ってるかわからないので英語版を見たほうがよさそうです。
m.ts10806

2018/05/07 07:48

確かに。かなり直訳っぽい感じですね。
m.ts10806

2018/05/07 07:51

https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload Note: To combat unwanted pop-ups, some browsers don't display prompts created in beforeunload event handlers unless the page has been interacted with; some don't display them at all. For a list of specific browsers, see the Browser_compatibility section. Google翻訳= 注意:不要なポップアップに対抗するために、一部のブラウザでは、ページが操作されていない限り、beforeunloadイベントハンドラで作成されたプロンプトは表示されません。いくつかはそれらをまったく表示しません。特定のブラウザーの一覧については、「Browser_compatibility」セクションを参照してください。 こっちの方が日本語としては分かりやすいですね。MDN日本語どうなってんだ・・・
ryu01212008

2018/05/07 09:06 編集

回答ありがとうございます。 ひとまずは、windowの外にマウスを移動したときにポップアップを表示するようにしました。 =離脱以外の行動も含みますが、ページを離れようとするユーザー全てに行動してしまいますので理想ではないですが、応急用として。 ただ、パソコンではマウスの動きで発火しますが、スマホユーザーに対して対応できないことが課題として今後も探していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問