的客户端JS组件送入轨道 (彗星服务器),要求如果服务器在不同的域或端口到JS本身运行,则必须执行
document.domain = document.domain;
任何其他JS之前被加载。 (参见文档 )。
这是什么呢? 它看起来像一个空操作! (我检查了,它实际上是必要的。)
的客户端JS组件送入轨道 (彗星服务器),要求如果服务器在不同的域或端口到JS本身运行,则必须执行
document.domain = document.domain;
任何其他JS之前被加载。 (参见文档 )。
这是什么呢? 它看起来像一个空操作! (我检查了,它实际上是必要的。)
其实,我写了这个代码。
当试图做跨子域/端口彗星时,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)
然后一切相匹配和交叉端口/子帧通信作品。
浏览器(a)当没有明确设置document.domain的,当明确设置(B)document.domain的区别......即使他们返回相同的值。
明确设置的值表示意向“合作”与其他子域的脚本(同一父域)。
如果两个父页面和外部脚本明确设置document.domain的相同的值,相同来源的限制,可以绕过,每个脚本可以访问所有的(另有限制)对象和对方的上下文属性。
我发现本网站上的以下信息: devguru 。 更具体地讲,这里的报价:
该属性设置或返回从文档起源服务器的域名。 它默认的文档是从retreived,但可以改变这个名称的后缀(只有后缀)的服务器的域名。 这使得脚本属性的共享,安全允许,来自不同服务器提供它们共享相同的域名后缀交付文档之间。
在我看来,它允许跨站点脚本为同一个域(即使子域是不同的)。
我会想,如果你不碰document.domain的,JS引擎只允许来自同一个域中其他的JavaScript。 有了这个属性,你就可以部署到像绕行文档状态的其他子域 。
该document.domain
拉动,从实际的URL默认的,如果没有明确设定。 如果浏览器会记录document.domain
已经从URL默认或者如果它被明确设置。 二者都必须是同一域的默认或两者都必须明确设置为同一个域这个工作。 如果一个是默认,一个显式设置,两者匹配,如果读两页仍然会从彼此交谈禁止。
请参阅: https://developer.mozilla.org/en-US/docs/DOM/document.domain