JavaScript权限被拒绝。如何允许受信任域之间的跨域脚本编写?
我们有一个基于.net的应用程序,由SAP enterprise portal iframes托管。 SAP门户的域是al.xx.companyname.com。.Net应用程序服务器的域是ss.xx.companyname.com 现在,当我通过企业门户打开应用程序时,我得到一个“权限被拒绝”的JavaScript错误。我在IE中启用了脚本调试,然后将visual studio调试器附加到JavaScript错误。我注意到下面的JavaScript代码抛出了这个错误来设置/重置脏标志JavaScript权限被拒绝。如何允许受信任域之间的跨域脚本编写?,javascript,cross-domain,Javascript,Cross Domain,我们有一个基于.net的应用程序,由SAP enterprise portal iframes托管。 SAP门户的域是al.xx.companyname.com。.Net应用程序服务器的域是ss.xx.companyname.com 现在,当我通过企业门户打开应用程序时,我得到一个“权限被拒绝”的JavaScript错误。我在IE中启用了脚本调试,然后将visual studio调试器附加到JavaScript错误。我注意到下面的JavaScript代码抛出了这个错误来设置/重置脏标志 if(t
if(top.EPCM!=null)
可以理解,这个问题是由跨域脚本造成的。i、 e.ss.xx.companyname.com的应用服务器正在尝试访问域al.xx.companyname.com的企业门户的浏览器组件
但是,这种交叉脚本是一种受信任的域脚本,我想以某种方式允许这种交叉脚本。我试图设置应用服务器的主DNS后缀。通过以下方法
var requireddomain = 'al.xx.companyname.com';
var text = document.domain; //returns the domain as ss.xx.companyname.com
if (text != requireddomain)
{
for (i=0; i < 2; i++)
{
dotposition = text.indexOf( "." );
text = text.substr(dotposition +1);
}
document.domain = text;
}
if(top.EPCM!=null)
var requireddomain = 'al.xx.companyname.com';
var text = document.domain; //returns the domain as ss.xx.companyname.com
if (text != requireddomain)
{
for (i=0; i < 2; i++)
{
dotposition = text.indexOf( "." );
text = text.substr(dotposition +1);
}
document.domain = text;
}
if(top.EPCM!=null)
var requireddomain='al.xx.companyname.com';
var text=document.domain//将域返回为ss.xx.companyname.com
如果(文本!=requireddomain)
{
对于(i=0;i<2;i++)
{
dotposition=text.indexOf(“.”);
text=text.substr(点位置+1);
}
document.domain=文本;
}
if(top.EPCM!=null)
通过上面的代码,document.domain对象被设置为companyname.com,这对于企业门户和应用服务器都是通用的。
但是,如果(top.EPCM!=null),则仍会在>>行中抛出权限拒绝问题
在过去的三天里,这个问题让我头疼不已。有人能帮我吗?
目标是允许应用程序服务器和企业门户之间的跨域脚本编写,这是一种受信任的连接。谢谢
更新:
有趣且令人沮丧的发展。我已经在我的应用服务器中安装了ssl证书。仍然会抛出“权限拒绝”错误
- 门户域名:al.xx.companyname.com
- 应用程序域:ss.xx.companyname.com
- 门户域名:al.xx.companyname.com
- 应用程序域:ss.al.xx.companyname.com
有没有关于如何继续的建议?同源策略可能非常严格,甚至对于受信任的站点也不例外 跨浏览器属性应该能够解决以下问题: 同一原产地规则有一个例外。脚本可以将document.domain的值设置为当前域的后缀。如果这样做,则较短的域将用于后续原点检查。例如,假设文档中的一个脚本执行以下语句: document.domain=“company.com”强>
我认为将两个系统设置为同一域名是不可能的。除了你的浏览器问题之外,这会导致严重的问题,你不觉得吗?请求如何知道要访问哪个系统?请发布
SetDomain()
的代码,我们可能会提供更多帮助。嗨,Alex,如果(top.EPCM!=null)本身,则会在>>行中抛出错误。因此,问题在于访问企业门户组件(EPCM)。@vs1984不一定:问题可能在于访问top
。该页面是否也包含document.domain
指令?@Pekka-是。top的可访问性也可能是一个问题。是的,页面有document.domain指令。我可以将document.domain值设置为companyname.com。但是,仍然会在-if(top.EPCM!=null)行中抛出权限拒绝错误。现在这个问题让我头晕目眩。@vs1984奇怪。他们有相同的协议,对吗?http://
或https://
,无混音?嗨;我采用document.domain方法,将域设置为companyname.com。我已经编辑了问题中的代码。然而,这个问题仍然存在。你能检查一下我是否做错了什么吗?@vs1984你需要在每一页和每一帧中设置document.domain
。是这样吗?@Pekka-是的。上述代码是在每个页面中包含的一个通用JavaScript文件中实现的。@Pekka-显然我对上述语句的理解是错误的。的确,每个交互帧的document.domain对象都应设置为相同。本期并非如此。@pekka-是的。现在可以了。但我们无法更改门户的document.domain(政治原因)。我们为应用服务器设置了一个DNS别名以匹配门户链接。然后它成功了。谢谢你指出了正确的方向。