Javascript 安全错误:在两个站点上应用document.domain时出现DOM异常18。我如何解决这个问题?

Javascript 安全错误:在两个站点上应用document.domain时出现DOM异常18。我如何解决这个问题?,javascript,cross-domain,user-agent,same-origin-policy,domexception,Javascript,Cross Domain,User Agent,Same Origin Policy,Domexception,我在内部服务器server1.mydomain.com/page.jsp上有一个页面,在不同的内部服务器10.x.x.x:8081/page.aspx上有另一个页面 在server1.mydomain.com上,我在page.jsp中设置document.domain如下: //page.jsp on server1.mydomain.com document.domain = document.domain; //page.aspx on 10.x.x.x document.domain =

我在内部服务器server1.mydomain.com/page.jsp上有一个页面,在不同的内部服务器10.x.x.x:8081/page.aspx上有另一个页面

在server1.mydomain.com上,我在page.jsp中设置document.domain如下:

//page.jsp on server1.mydomain.com
document.domain = document.domain;
//page.aspx on 10.x.x.x
document.domain = "server1.mydomain.com";
// test if same-origin policy violation occurs
document.getElementById("div_el").innerHTML = window.top.location.href;
当我在document.domain上发出警报时,它显示为server1.mydomain.com

在10.x.x.x服务器上,我在page.aspx中设置document.domain,结果如下:

//page.jsp on server1.mydomain.com
document.domain = document.domain;
//page.aspx on 10.x.x.x
document.domain = "server1.mydomain.com";
// test if same-origin policy violation occurs
document.getElementById("div_el").innerHTML = window.top.location.href;
在Safari 5.1.5中,控制台上会弹出一个错误:

SECURITY_ERR: DOM Exception 18: An attempt was made to break through the security policy of the user agent."
据我所知,当您设置document.domain时,端口号设置为null;所以,你必须在两端都设置它,我做到了。然后,这个错误发生了,我抓挠我的头为什么。这是否与我使用的是10.x.x.x而不是实际的域名有关


谢谢。

您只能将
document.domain
设置为其当前值或当前设置的超级域。因此,“foo.something.com”上的页面可以将其设置为“something.com”,但不能设置为“something.else.com”。

您只能使用
document.domain
从更具体的子域更改为不太具体的域。像

console.log(document.domain); // server1.mydomain.com

document.domain = 'mydomain.com'

console.log(document.domain); // mydomain.com

它不能用于设置更具体的子域或完全不同的域。

因此,如果我将两者都更改为mydomain.com,只要两台服务器都在mydomain.com上,它会工作吗?假设我有server1.subdomain.mydomain.com和server2.subdomain.mydomain.com。如果我将两者都设置为mydomain.com,它会工作吗?@user717236:如果客户端页面是从
mydomain.com
托管的,您将无法向
server1.subdomain.mydomain.com
server2…
发出AJAX请求,并且使用
document.domain
也没有帮助。但是,如果相反的情况是正确的,并且客户端页面是从服务器1.subdomain.mydomain.com托管的,那么您可以使用
document.domain
,这样您就可以向
mydomain.com
发出请求。哦,我明白了。因此,在我的例子中,我认为它不会起作用,因为页面实际上托管在hostname.subdomain.mydomain.com上。如果一个是serverX.mydomain.com,另一个是serverY.subdomain.mydomain.com,那么我可以用它做点什么。回到绘图板上。谢谢你的帮助。是的,我想我现在明白多了。这两台主机无法通过document.domain相互通信,因为它已设置。我得想点别的。再次感谢。