Orbited的客户端JS组件( cometd 服务器),要求如果服务器运行在与 JS 本身不同的域或端口上,则必须执行
document.domain = document.domain;
在加载任何其他 JS 之前。 (参见 documentation 。)
这是做什么的?它看起来像一个 NOOP! (我已经查过了,其实是有必要的。)
最佳答案
我实际上写了这段代码。
尝试跨子域/端口 cometd 时,iframe 需要与父框架具有相同的 document.domain
值。不幸的是,浏览器在内部存储了原始 document.domain
值的域名和端口。但是 javascript 中的 getter 和 setter 对端口一无所知。所以问题是这样的:如果顶部框架 document.domain
是 ('example.com', 80)
,底部框架是 ('comet. example.com', 80)
,如何让底部框架也成为 ('example.com', 80)
?
你不能,因为更改主机名部分必然会导致端口设置为 null
,所以你能做的最好的是 ('example.com', null)
在底部框架中。因此顶部框架也需要设置为该值,设置 document.domain=document.domain
就是这样做的。它将浏览器中的内部表示从 ('example.com', 80)
更改为 ('example.com', null)
然后所有内容匹配并交叉端口/子域框架通信有效。
关于javascript - document.domain = document.domain 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481251/