document.domain错误

时间:2011-05-06 20:14:47

标签: javascript same-origin-policy

Permission denied for <http://www.guy.lt> (document.domain=<http://www.guy.lt>) to get property Window.document from <http://www.guy.lt> (document.domain has not been set).

如果这不是一个bug,那么如何解释这种行为呢? (或者至少是错误信息)当然,还有如何修复它?

另一件奇怪的事情是:

debug.log('0');
document.domain = 'guy.lt';
debug.log('1');
document.domain = 'wwww.guy.lt';
debug.log('2');
永远不会触发

debug.log('2')。但是,console中没有错误。脚本停止执行。

2 个答案:

答案 0 :(得分:2)

我无法根据您的问题推断出您的错误,但要启用跨域脚本编制,您必须将document.domain设置为域的相同公共部分。也相关:

  • 如果一方使用foo.guy.lt而另一方使用bar.guy.lt,则必须在两侧设置document.domain = "guy.ly"

  • 如果您将document.domain设置为guy.lt,则实际域必须是guy.lt本身或guy.lt的子域。您无法建立(子)域名。

  • 您总是必须明确指定document.domain的值,即使该值本身就是实际域。

  • 您永远不能将document.domain更改回更具体的子域名。因此,如果实际域名为www.guy.lt,则可以将document.domain更改为guy.lt。但是,在此更改后,您无法将其更改回www.guy.lt

示例:

// Actual domain is "www.foo.com"
document.domain = "foo.com"; // this is valid

// Actual domain is "bar.foo.com"
document.domain = "www.foo.com"; // this is invalid, "bar.foo.com" is not a subdomain of "www.foo.com"

// Actual domain is "blah.bar.foo.com"
document.domain = "bar.foo.com" // Ok
document.domain = "foo.com" // Still ok
document.domain = "bar.foo.com" // Invalid, you can't change it back to a more specific domain.

答案 1 :(得分:1)

仅当两个页面明确将document.domain设置为相同值时,才允许通过document.domain进行跨域访问。这是一项必要的安全措施;否则something.company.com可以将document.domain设置为company.com并从company.com读取内容。事实上,如果company.com明确选择将document.domain设置为company.com,则只能这样做。