【问题标题】:SECURITY_ERR: DOM Exception 18 when applying document.domain on both sites. How do I resolve this?SECURITY_ERR:在两个站点上应用 document.domain 时出现 DOM 异常 18。我该如何解决这个问题?
【发布时间】:2012-04-19 12:53:26
【问题描述】:

我在内部服务器上有一个页面 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;

当我在 document.domain 上发出警报时,它显示为 server1.mydomain.com。

在10.x.x.x服务器上,我在page.aspx中设置了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 而不是实际域名有关吗?

谢谢。

【问题讨论】:

    标签: javascript cross-domain user-agent same-origin-policy domexception


    【解决方案1】:

    您只能使用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.comserver2... 发出AJAX 请求,并且使用document.domain 将无济于事.但是,如果情况正好相反,并且客户端的页面托管在例如server1.subdomain.mydomain.com,您可以使用document.domain,这样您就可以向mydomain.com 发出请求。
    • 哦,我明白了。因此,就我而言,我认为它不会起作用,因为这些页面实际上托管在 hostname.subdomain.mydomain.com 上。如果一个是 serverX.mydomain.com,另一个是 serverY.subdomain.mydomain.com,那么我可以用它做点什么。回到绘图板。感谢您的帮助。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的帮助。是的,我想我现在理解得更好了。这两个主机无法通过 document.domain 相互通信,因为它已设置。我得想点别的了。再次感谢。
    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2011-07-27
    • 2023-01-03
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多