Javascript 未捕获的安全性错误:阻止了具有原点的帧。。。从使用原点访问帧

Javascript 未捕获的安全性错误:阻止了具有原点的帧。。。从使用原点访问帧,javascript,security,iframe,same-origin-policy,Javascript,Security,Iframe,Same Origin Policy,我为SAP解决方案(无论什么)制作了一个组件,该组件通过iframe嵌入到报表中。在SAP平台(BO)上部署报告后,我出现了以下错误(在Chrome上,但在IE或FF上也不起作用): iframe被嵌入到我的组件中,因此它应该运行在与report端口相同的同一个域上 我在某处发现了这个,但它并没有真正帮助我理解我需要做什么 有没有办法摆脱这个问题,或者至少解决这个问题? 谢谢:) 编辑: 主机页URL: 调用iframe上的属性(并生成错误)的文件的URL: 框架的URL: iframe本身嵌

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

iframe被嵌入到我的组件中,因此它应该运行在与report端口相同的同一个域上

我在某处发现了这个,但它并没有真正帮助我理解我需要做什么

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

编辑:

主机页URL:

调用iframe上的属性(并生成错误)的文件的URL:

框架的URL:

iframe本身嵌入了一些脚本标记,我可以在控制台的网络标记中看到所有加载良好的内容

也许会有帮助

编辑2:


我刚刚意识到SAP报表本身就嵌入到了iframe中。这意味着我的iframe在iframe中,这可能是问题所在。不过,当从Eclipse启动报告时,一切都正常。

我终于找到了解决方案

iframe顶部的domain.location设置为
domain.com
,iframe的domain.location设置为
support.domain.com

虽然我仍然认为两者属于同一个域,但浏览器似乎不喜欢它

重新设置域。位置完成了工作

为了回答有关如何重新设置
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;
}
var topDomain=(函数句柄域(参数){
如果(参数类型==“未定义”){
返回;
}
参数=参数。拆分(“&”);
var参数=[],
领域;
对于(变量i=0;i-1&&domain!==topDomain){
document.domain=topDomain;
}

如果在同一个域上,请在iframe上使用
sandbox=“允许相同来源”
。域、端口和方法(
http
vs.
https
)必须完全相同。好的,我将尝试使用sandbox属性。我在帖子中添加了URL。主机页URL?我没有尝试使用sandbox=“允许相同来源”,它不起作用。仍然会触发相同的错误。显示您是否重置了
域。位置
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;
}