【问题标题】:How To Prevent Iframe Pages Being Inserted Into IE Browsing History如何防止 iframe 页面被插入到 IE 浏览历史记录中
【发布时间】:2012-04-14 07:01:42
【问题描述】:

我在将 iframe 页面插入 IE9 浏览历史记录时遇到了很多麻烦。这很痛苦,因为您必须多次单击才能返回上一页。这是什么原因?是浏览器的bug还是页面的bug?

编辑: 我意识到我正在使用 javascript 来更新页面上所有 iframe 的源以添加 wmode=transparent 属性。

$('iframe').each(function () {
    var url = $(this).attr("src")
    $(this).attr("src", url + "?wmode=transparent");
 });

这是为了对抗 YouTube 视频背后的菜单导航而添加的。有没有办法阻止 IE 将这些事件插入历史记录?

【问题讨论】:

    标签: internet-explorer iframe browser-history


    【解决方案1】:

    一个选项是替换 iframe 而不是更新源。

    $('iframe').each(function () {
       var url = $(this).attr("src")
       //$(this).attr("src", url + "?wmode=transparent");
    
       url = url + "?wmode=transparent";
    
       var frm = document.createElement("iframe");
       frm.src = url;
       //copy attributes of this -> frm
       $(this).replaceWith(frm);
    });
    

    当 iframe 的 src 属性在插入 DOM 后被修改时,就会创建一个历史记录条目。如果您无法控制 iframe(第三方 iframe)的内容,那么如果他们以任何方式修改其页面的位置,则会创建一个历史条目。

    【讨论】:

      【解决方案2】:

      我不了解所有情况,但在 Finance.yahoo.com 上,有时会在后退按钮历史记录中插入指向 facebook 的 like.ph 的链接。它是由页面上的脚本引起的。当 facebook 链接在网页上可见时,就会发生这种情况。这会触发在后退按钮历史记录中创建链接的功能。用户无需单击任何内容即可发生这种情况。

      【讨论】:

        【解决方案3】:

        而不是

        $(this).attr("src", url + "?wmode=transparent");
        

        $(this).get(0).contentWindow.location.replace(url + "wmode=transparent");
        

        【讨论】:

        • 我相信这只有在 iframe 内容与父级来自同一个域时才有效。
        • @JoeEnzminger 你是对的。相同的域、端口和协议。但是有针对同源策略问题的修复
        猜你喜欢
        • 2015-02-05
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 2012-08-19
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        相关资源
        最近更新 更多