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
中没有错误。脚本停止执行。
答案 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
,则只能这样做。