我使用带有iframe
的jQuery UI对话框,以便提供页内"弹出窗口"用于编辑。每次打开对话框时,它都会向浏览器添加两个请求到历史记录:一个用于打开时加载的URL,另一个用于在关闭对话框时将src
设置为空白。如果最终用户点击后退按钮,则他们看不到任何正在发生的事情,因为它会返回iframe
中不再显示的内容。
所以,我理解为什么这种情况正在发生,但我无法弄清楚如何预防它。有没有办法去"倒带" iframe
关闭时的历史记录?
$(document).ready(function() {
var $iframe = $('<iframe id="uiDialogIframe" data-reload="0" frameborder="0" marginwidth="0" marginheight="0" width="800" height="450" />');
var $dialog = $('<div id="uiDialogIframeWrapper" />').append($iframe).appendTo('body').dialog({
autoOpen: false,
modal: true,
resizable: false,
width: 'auto',
height: 'auto',
close: function () {
$iframe.attr('src', '');
if ('1' === $iframe.attr('data-reload')) {
location.reload();
}
}
});
$('a.uiDialogIframe').on('click', function (e) {
e.preventDefault();
var $this = $(this);
$iframe.attr('src', $this.attr('href'));
$dialog.dialog('option', 'title', $this.data('title'))
.dialog('open');
});
});
答案 0 :(得分:1)
使用html5似乎你可以用历史对象
做一些很好的新事物一些additional information from mozilla
这是来自here的模糊信息,因此您可以添加一些额外的代码来控制这些加载如何影响历史记录。
可能不是100%,但这应该让你在正确的位置找到它。
答案 1 :(得分:1)
我最终通过每次重新创建iframe
来避免创建历史记录。
父脚本
$(document).ready(function() {
var $dialog = $('<div id="uiDialogIframeWrapper" data-reload="0" />').appendTo('body').dialog({
autoOpen: false,
modal: true,
resizable: false,
width: 'auto',
height: 'auto',
close: function () {
// check for reload flag
if ('1' === $dialog.attr('data-reload')) {
location.reload();
}
}
});
$dialog.on('goto', function(e, url) {
$dialog.empty().append('<iframe frameborder="0" marginwidth="0" marginheight="0" width="800" height="450" src="' + url + '" />');
});
$('a.uiDialogIframe').on('click', function (e) {
e.preventDefault();
var $this = $(this);
$dialog.trigger('goto', $this.attr('href'))
.dialog('option', 'title', $this.data('title'))
.dialog('open');
});
});
儿童剧本
$(document).ready(function() {
// get the dialog object
var $dialog = parent.jQuery('#uiDialogIframeWrapper');
// flag the parent to reload
$('.parentReload').on('click', function() {
$dialog.attr('data-reload', '1');
});
// close the dialog
if (0 < $('body.closeDialog').length) {
$dialog.dialog('close');
}
// use goto for internal links
$('a[href^="/"]').on('click', function(e) {
e.preventDefault();
$dialog.trigger('goto', $(this).attr('href'));
});
});