【问题标题】:X-Frame-Options Blocks Ajax Response From Being Displayed in iframeX-Frame-Options 阻止 Ajax 响应在 iframe 中显示
【发布时间】:2013-08-22 15:39:45
【问题描述】:

我有一个使用 jquery 将 POST 请求发送到我自己的服务器(Java servlet)的 javascript 方法。响应是一个 HTML 页面,其中包含标签:

<meta http-equiv="X-FRAME-Options" content="SameOrigin">

然后此页面将显示在现有页面的 iframe 中。 jquery方法是这样的:

function ajaxCall(urlString, params){
    $.ajax({
        type: "POST",
        dataType:'html',
        url: urlString ,
        data: params,
        success: function(msg){
            $("#A1B2C3D4E5").contents().find('html').html(msg);
        },
        failure:  function(msg) {
            $("#A1B2C3D4E5").contents().find('html').html(msg);
        }
    });
}

ID 为 A1B2C3D4E5 的 HTML 组件是 iframe。问题是返回的html页面没有显示在Chrome的iframe中。它给出的错误信息是:

Refused to display 'about:blank' in a frame because it set 'X-Frame-Options' to 'SameOrigin'. jquery-1.7.2.min.js:32
Blocked a frame with origin "https://localhost:8443" from accessing a frame with origin "null".  The frame requesting access has a protocol of "https", the frame being accessed has a protocol of "data". Protocols must match.

它在 Firefox 上运行良好,但在 Chrome 上却不行。

通过删除以下的元部分:

<meta http-equiv="X-FRAME-Options" content="SameOrigin">

它在 Chrome 中也可以正常工作。但由于某种原因,我无法删除此标签。

我的问题是为什么会发生这种情况?有没有办法修复它并仍然保留元标记?

非常感谢。

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    如果指定了“SameOrigin”,则此元标记用于防止页面显示在另一个网站的 iframe 内。

    我收到的网页来自通过 POST 的 Ajax 调用,而不是来自 iframe 的包含网页。在这种情况下,它被归类为不同来源而不是相同来源。

    因此,如果元标记带有“SameOrigin”值,则通过 jquery ajax 调用请求的页面无法显示在托管页面的 iframe 内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多