ブラウザバックは、ページ自体の前にネストされたiframeに動作します - それを避ける方法はありますか?
-
20-09-2019 - |
質問
AjaxとたくさんのJavaScriptによって動的なデータがロードされたページがあります。
ページには、ユーザーが選択できるリストが含まれており、選択した各値が新しいデータをページにロードします。
これらのデータ項目の1つは、IFRAMEに提供されるURLです。
私が使う jQuery BBQ:バックボタン&クエリライブラリ ブラウザバックの動作をシミュレートします。
IFRAMEが以前の場所に戻ってから、再び戻ってページを戻す必要があるという事実に加えて、すべてがうまく機能します。
IFRAMEの背中の動作を無効にする方法はありますか?
解決
私の問題に対する答えは、それが他の人に役立つ可能性があると推測しました。
問題は、新しいURLをiframeに割り当てた方法でした。JQueryを使用したので、次のように見えました。
$('#myIFrame').attr('src',newUrl);
そのようにURLを割り当てるとき、それは戻るために訪問したURLのブラウザのリストに新しいエントリを追加します。
それは望ましい動作ではなかったので、いくつかのグーグルの後、「バックリスト」に追加せずに新しいURLをiframeオブジェクトに割り当てることができることがわかりました。
var frame = $('#myIFrame')[0];
frame.contentWindow.location.replace(newUrl);
これにより、私の背面ボタンは予想通りに動作します。
ところで、私は私の答えを得ました ここ.
これが私にとってそうであったようにあなたに役立ったことを願っています。
他のヒント
IFRAME用のクロスドメインURLを設定しようとすると、受け入れられた答えは機能しないようです。回避策として、設定する前にDOMからiframeを取り外しました src
(jqueryを使用)。
// remove IFrame from DOM before setting source,
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();
iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);
I suggest you create a hyperlink within your iframe. call it 'Back' and put a href as javascript:history.back(-1)That's the best you can do I think.
Basically you need to prevent the addition of new history entries in the iframe, history.replaceState introduced in HTML5 would work in most cases.
history.pushState(state, title, url);
No, this is entirely up to the browser.