javascript - 未捕获的 SecurityError : Blocked a frame with origin . .. 来自访问具有来源的框架

标签 javascript security iframe same-origin-policy

我已经为通过 iframe 嵌入到报告中的 SAP 解决方案(无论什么)制作了一个组件。在 SAP 平台 (BO) 上部署报告后,出现此错误(在 Chrome 上,但在 IE 或 FF 上也不起作用):

Uncaught SecurityError: Blocked a frame with origin "http://support.domain.com" from accessing a frame with origin "http://support.domain.com". The frame requesting access set "document.domain" to "domain.com", but the frame being accessed did not. Both must set "document.domain" to the same value to allow access.

iframe 嵌入到我的组件中,因此它应该在与报告相同的端口上运行在相同的域上。

我找到了这个 post关于 SO 和这个 one ,但这并没有真正帮助我理解我需要做什么。

有没有办法摆脱这个问题,或者至少解决这个问题? 谢谢 :)。

编辑:

主页网址:http://support.domain.com/BOE/OpenDocument/opendoc/openDocument.jsp?sIDType=CUID&iDocID=AbmffWLjCAlFsLj14TjuDWg

调用 iframe 上的属性(并生成错误)的文件的 URL:http://support.domain.com/BOE/OpenDocument/1411281523/zenwebclient/zen/mimes/sdk_include/com.domain.ds.extension/res/cmp/js/component.js

框架的网址: http://support.domain.com/BOE/OpenDocument/1411281523/zenwebclient/zen/mimes/sdk_include/com.domain.ds.extension/res/cmp/js/map/js/map.html

iframe 本身嵌入了一些脚本标签,我可以在控制台的 Network 标签中看到一切正常加载。

也许它能帮上忙。

编辑 2:

我刚刚意识到 SAP 报告本身嵌入到 iframe 中。这意味着我的 iframe 在 iframe 中,这可能是问题所在。尽管如此,当从 Eclipse 启动报告时,一切正常。

最佳答案

我终于找到了解决方案。

我的 iframe 的顶部有一个 domain.location 设置为 domain.com 而我的 iframe 的一个 domain.location 设置为 support.domain.com.

事件虽然我仍然认为两者属于同一个域,但浏览器不喜欢它看起来如此。

重新设置 domain.location 完成了工作。

为了回答那些询问如何重新设置 location.domain 的问题,这里是我的团队过去使用的代码片段。这是很旧的(2 年前),没有真正优化,我们不再使用它,但我想它值得分享。 基本上,我们所做的是加载 iframe,并在 URL 参数中将顶级域传递给它。

var topDomain = (function handleDomain(parameters) {
        if (typeof parameters === "undefined") {
            return;
        }
        parameters = parameters.split("&");
        var parameter  = [],
            domain;
        for (var i = 0; i<parameters.length; ++i) {
            parameter.push(parameters[i]);
        }
        for (var j = 0; j<parameter.length; ++j) {
            if (parameter[j].indexOf("domain") > -1) {
                domain = parameter[j];
                break;
            }
        }
        if (typeof domain !== "undefined") {
            domain = domain.split("=");
            return domain[1];
        }
        return; 
    })(window.location.search),
    domain = document.domain;

if (domain.indexOf(topDomain) > -1 && domain !== topDomain) {
    document.domain = topDomain;
}

关于javascript - 未捕获的 SecurityError : Blocked a frame with origin . .. 来自访问具有来源的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284765/

相关文章:

javascript - 表单上所有元素的公共(public)事件

security - Nginx + Supervisor + Gunicorn + Django + Celery - 安全问题

javascript - Iframe Resizer 未调整大小?

jquery - 在输入更改时更改 css

javascript - 随机出现 ECONNREFUSED 错误

javascript - Ajax 未捕获类型错误 : Illegal invocation

javascript - jquery可重用组件?

android - 我确保字符串完整性的方法安全吗?

php - OWASP ESAPI encodeForHTML 带有一些允许的格式化标签

css - 在 iFrame 媒体查询中打印