JavaScript权限被拒绝.如何在受信任域之间允许跨域脚本?

HVS*_*HVS 2 javascript cross-domain

我们有一个基于.net的应用程序,托管有SAP企业门户网站iframe.SAP门户的域名是al.xx.companyname.com..Net应用程序服务器的域是ss.xx.companyname.com.

现在,当我通过企业门户打开应用程序时,我收到了"权限被拒绝"的JavaScript错误.我在IE中启用了脚本调试,然后将Visual Studio调试器附加到JavaScript错误.我注意到从以下JavaScript代码中抛出错误来设置/重置脏标志.

if(top.EPCM!=null)
Run Code Online (Sandbox Code Playgroud)

可以理解的是,该问题是由跨域脚本编写引起的.即ss.xx.companyname.com的应用服务器正在尝试访问域al.xx.companyname.com的企业门户的浏览器组件.

但是,这个交叉脚本是一个受信任的域脚本,我想以某种方式允许这种交叉脚本.我试图设置应用程序服务器的主DNS后缀.按照以下方法.

  1. 右键单击我的应用程序服务器计算机.(顺便说一下,Windows 2003服务器)
  2. 选择属性 - 计算机名称
  3. 单击更改按钮,然后在下一个窗口中单击更多按钮
  4. 在"这台计算机的主要DNS后缀"文本框下,我输入了值 - al.xx.companyname.com.

现在,在上述设置之后,我假设企业门户和应用服务器的域都将被视为al.xx.companyname.com.但是,我仍然在上面提到的相同JavaScript代码中获得JavaScript权限被拒绝错误.

正如回复中所建议的,我还实现了document.domain方法.

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)
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,document.domain对象设置为companyname.com,这对于企业门户和应用程序服务器都是通用的.但是仍然会在行中>> if(top.EPCM!= null)中抛出权限被拒绝的问题

过去3天这个问题让我头疼.有人可以帮我这个吗?目标是允许应用程序服务器和作为可信连接的企业门户之间的跨域脚本.谢谢.

更新:

有趣和令人沮丧的发展.我在应用服务器中安装了ssl证书.仍然会抛出权限被拒绝错误.

  • 门户域名:al.xx.companyname.com
  • app域名:ss.xx.companyname.com

我试图将document.domain属性设置为2个子级别,即到companyname.com.

但仍然会发生'允许拒绝错误'.

我想,document.domain的设置仅在app域是门户域的子集时才有效.即

  • 门户网站域名:al.xx.companyname.com
  • App域名:ss.al.xx.companyname.com.

在上面的例子中,我可以将app域减少到一个sublevel down(到al.xx.companyname.com).然后我想,它会起作用.

但是在我的情况下,门户网站和应用服务器是同一companyname.com的2个分支子域,因此仍然不允许交叉脚本.

有关如何进行的任何建议?

Pek*_*ica 7

同源策略可能非常严格,即使对于受信任的站点也不会产生异常.

跨浏览器document.domain属性应该能够解决这个问题:

同一原产地规则有一个例外.脚本可以将document.domain的值设置为当前域的后缀.如果它这样做,则较短的域用于后续的原始检查.例如,假设http://store.company.com/dir/other.html文档中的脚本执行以下语句:

document.domain ="company.com";