39

我有一个页面,其中包含一些 ajax 和大量 javascript 加载的动态数据。

该页面包含一个列表,用户可以从中进行选择,每个选定的值都会将新数据加载到页面。

这些数据项之一是提供给 iframe 的 url。

我使用jQuery BBQ: Back Button & Query Library来模拟浏览器返回行为。

除了当我第一次单击后退按钮时 iframe 返回到其先前位置然后我需要再次单击后退以使页面返回这一事实之外,一切都很好。

有没有办法禁用 iframe 的后退行为?

4

6 回答 6

73

我找到了我的问题的答案,猜测它可能对其他人有用。

问题在于我为 iframe 分配新 URL 的方式,我使用了 Jquery,所以它看起来像这样:

$('#myIFrame').attr('src',newUrl);

当以这种方式分配 URL 时,它会在浏览器的访问 URL 列表中添加一个新条目以返回。
这不是我们想要的行为,所以经过一番谷歌搜索后,我发现您可以为 iframe 对象分配一个新 URL,而无需将其添加到“后备列表”中,它看起来像这样:

var frame = $('#myIFrame')[0];  
frame.contentWindow.location.replace(newUrl);

这样我的后退按钮的行为完全符合预期。

顺便说一句,我从这里得到了答案。

希望这对你有帮助,就像对我一样。

于 2010-02-13T11:24:26.850 回答
5

如果您尝试为 IFrame 设置跨域 URL,则接受的答案似乎不起作用。src作为一种解决方法,我在设置(使用 jQuery)之前将 IFrame 从 DOM 中分离出来。

// 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);
于 2017-08-24T08:52:40.893 回答
1

我建议您在 iframe 中创建一个超链接。将其称为“返回”并将 href 设置为 javascript:history.back(-1) 我认为这是你能做的最好的事情。

于 2014-08-27T11:57:31.640 回答
0

我在引导模式中管理跨域 iframe,唯一对我有用的解决方案是将以下代码放在每个 iframe 页面的头部:

    history.pushState(null, null, location.href);
    window.onpopstate = function () {
      history.go(1);
    };

这不适用于所有人,因为您需要控制 iframe 内容,此外它还会破坏父窗口的历史记录链

于 2020-09-14T09:22:44.480 回答
0

基本上你需要防止在 iframe 中添加新的历史条目, HTML5 中引入的history.replaceState在大多数情况下都可以工作。

history.pushState(state, title, url);
于 2016-04-12T10:12:29.263 回答
-5

不,这完全取决于浏览器。

于 2010-02-13T10:17:22.327 回答