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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

3回答

2569閲覧

clickイベントをブラウザの履歴に残したくない

yu_6

総合スコア22

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

1クリップ

投稿2019/03/22 14:23

編集2019/03/22 14:33

発生している問題

preventDefault()を使えばできると思い、試したけど押した回数だけ履歴が残ってしまう。

該当のソースコード

jQuery

1$(document).on('click', '.item1', function (e) { 2 $(".item1").click(function (e) { 3 e.preventDefault(); 4 $('#iframe').iziModal('open'); 5 $('#modal').iziModal('open', { 6 iframeURL: $(this).data('href') 7 }); 8 }); 9 $("#modal").iziModal({ 10 iframe: true, 11 width: '98%', 12 iframeHeight: 650, 13 zindex: '110', 14 iframeURL: "data.html", 15 group: 'works', 16 overlayColor: 'rgba(0,0,0,0.1)' 17 }); 18 $(".item1").off('click'); 19});

クリックしてモーダルウインドウを出す、という実装をしています。

試したこと

return false;をすればいいのかなと思ったけど、だめでした

jQuery

1$(document).on('click', '.item1', function (e) { 2 e.preventDefault(); 3 $(".item1").click(function (e) { 4 $('#iframe').iziModal('open'); 5 $('#modal').iziModal('open', { 6 iframeURL: $(this).data('href') 7 }); 8 }); 9 $("#modal").iziModal({ 10 iframe: true, 11 width: '98%', 12 iframeHeight: 650, 13 zindex: '110', 14 iframeURL: "data.html", 15 group: 'works', 16 overlayColor: 'rgba(0,0,0,0.1)' 17 }); 18 $(".item1").off('click'); 19 return false; 20});

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

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

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

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

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

kei344

2019/03/22 14:25

「履歴」とは何の履歴でしょうか?
yu_6

2019/03/22 14:31 編集

chromeみたいなブラウザの履歴です。ページ履歴とか言うんでしょうか…?
kei344

2019/03/22 14:35

「モーダルで開いたiframe中のページが履歴に残る」のが問題なのでしょうか。
yu_6

2019/03/22 14:39

はいそうです。履歴に一度も残さずiframeを開きたく思っています
guest

回答3

0

履歴とは chrome://history/ の事なのでしょうか。

http://izimodal.marcelodolce.com/ の [iframe] で検証した限りでは、https://player.vimeo.com/video/22439234?autoplay=1 の履歴は chrome://history/ に残りませんでしたが…(Google Chrome 72.0.3626.121)。

DOM的にはiframe要素を読み込んでいるようなので、何某かの機構でiframeリンク先が履歴に残る仕様であれば。jQuery.ajax でコンテンツを取得すれば回避できる可能性はあります。

Re: yu_6 さん

投稿2019/03/23 07:01

編集2019/03/23 07:03
think49

総合スコア18162

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

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

yu_6

2019/03/24 02:37

ご回答ありがとうございます。 chrome history... ( https://i.imgur.com/0czKuF8.png )この画面のものでしょうか。 ( https://i.imgur.com/0tquq6q.png )chromeでは左上の矢印の、この画面のことです。iFrameをクリックした分だけ←で戻らないとiFrame以前には戻れないやつです。この履歴の言い方がわからなくてごめんなさい… ajaxですか。また少し勉強して試してみようと思います。
think49

2019/03/24 02:46

「左上の矢印」は分かりませんが、私がいうそれは、アドレスバーに chrome://history/ を入力して、[Enter] 押下で開けます。 > iFrameをクリックした分だけ←で戻らないとiFrame以前には戻れないやつです これも分かりませんが、私がいうのは iframe をクリックしてモーダルウインドウを開いても、リンク先の https://player.vimeo.com/video/22439234?autoplay=1 は履歴に登録されないという事です。 現象は具体的に書きましょう。
yu_6

2019/03/24 04:22 編集

だと先程貼り付けたURLの画像と同じ画面ですね。 ( https://i.imgur.com/jyL8LHE.png )こういうことです chromeを普段使ってなかったらあまりピンとこないかもです
think49

2019/03/24 04:41

状況は理解しましたが、ページ遷移が発生している以上は、[戻る] ボタンの履歴に残るのは自然な動作です。 ページ遷移しないようにするには、iframe要素内でリンクを使わず、ボタン押下でJavaScriptで動的にコンテンツを取得→描画させる必要があります(ここまでいくと、iframe要素を使わなくてもいいかもしれません)。
yu_6

2019/03/26 04:33 編集

遅くなりすみません。 なるほど。 ちなみに、このサイト( https://oscarotero.com/jquery/ ) だとモーダルを開いて閉じても戻るボタンの履歴には残らないのですが、そしてまんまこのようなことがしたいのですが、これはajaxを使っているのでしょうか? edit: ソースを見た所、0.jsの一番最後らへんにmodalの記述を発見したのですが、iframeという文字が見当たりました。このモーダルプラグインの記述範囲は 13546行目(/* 4 */)~最後まで です。 think49さんのおっしゃる技を使っているのでしょうか?それとも他の技?
guest

0

はいそうです。履歴に一度も残さずiframeを開きたく思っています

下記方法で出来るようですが(未検証)、ドメインが違う場合はCROSSに引っかかって失敗するかも。また、iziModalがその呼び出し方に対応していない可能性が高いので、やり方を考える必要はあると思います。

【iframeのsrc変更時に履歴を残さない | Project T】
https://www.takurokamiyoshi.net/blog/57/

投稿2019/03/22 14:54

kei344

総合スコア69398

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

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

yu_6

2019/03/23 05:19 編集

入れてみたのですが履歴は変わりませんでした… もしかして $('iframe').contentWindow.location.replace('http://XXX'); 以外にも何か入れないと行けなかったんでしょうか
kei344

2019/03/23 05:19

どこにどう入れて、何を試したかも書いていませんし、こちらとしては何もわかりません。
yu_6

2019/03/23 05:32

$(document).on('click', '.item1', function (event) { $(".item1").click(function (event) { event.preventDefault(); $('#iframe').iziModal('open'); $('#modal').iziModal('open', { iframeURL: $(this).data('href') }); }); $("#modal").iziModal({ iframe: true, // fullscreen: true, width: '98%', iframeHeight: 650, zindex: '110', iframeURL: "data.html", group: 'works', overlayColor: 'rgba(0,0,0,0.1)' }); $(".item1").off('click'); $('#iframe').contentWindow.location.replace('data.html'); //ここに追加 }); です。 エラーで「Uncaught TypeError: Cannot read property 'location' of undefined」と出て実行されませんでした。
kei344

2019/03/23 05:37

iziModalの中でiframeの実体を設置/操作している(と予想できる)ので、そう書いても動かないと思います。 切り替えに介入することになるため、iziModal自体使えないのでは。(少なくともiframeURLでの指定では無理だと思います)
yu_6

2019/03/23 05:54

うーんどうすればいいのでしょうか? 諦めるしかないということですか?
kei344

2019/03/23 06:04

まず、iziModalを使わずiframeでの切り替えを試験して、履歴についての問題が解決できるか確認しましょう。回答でも書いている通りこちらでは検証していません。(特定のブラウザに依存した手法の可能性もあります) 次に、それで問題なく履歴が残らなくなった場合、モーダル表示に適したライブラリを探しましょう。 多くのモーダルライブラリが、モーダルエリアに新しく要素を追加して表示(HTMLをモーダルを開くたびに構築)するため、提示した方法を介入させる手段がありません。HTMLを最初から非表示で用意して(そのなかにiframeを入れる)、それを表示するだけのモーダル実装を探してきて使用しましょう。その表示前に、クリックした要素に合わせて書き換えを行えば、(前提部分が問題ないのであれば)できると思います。
yu_6

2019/03/23 06:21

また大変そうですね… 別の方法を探すか、なければ諦めようと思います。ありがとうございました。
guest

0

自己解決

iziModal.jsではなく、magnific Popup.jsを使うことで解決しました。
こんなに素晴らしいプラグインがあったとは…
御二方共ありがとうございました!

投稿2019/03/29 19:16

yu_6

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問