document.domain = document.domain 有什么作用?
我实际上写了这段代码。
当尝试做跨子域/端口彗星时,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。更具体地说,这是引用:
此属性设置或返回文档源自的服务器的域名。这默认为从中检索文档的服务器的域名,但可以更改为该名称的后缀(并且只能是后缀)。这允许在从不同服务器交付的文档之间共享脚本属性,安全性允许,前提是它们共享相同的域后缀。
在我看来,它允许同一域的跨站点脚本(即使子域不同)。
我想如果你不接触 document.domain,js 引擎只允许来自同一个域的其他 javascripts。使用该属性,您将能够部署到其他子域,如轨道文档状态。
该document.domain
如果没有明确设定是直接从实际的URL默认。浏览器将记录是否document.domain
来自 URL 的默认值或是否明确设置。两者都必须是同一个域的默认值,或者两者都必须显式设置为同一个域才能工作。如果一个是默认的,一个是显式设置的,如果读取都匹配,两个页面仍然会被禁止互相交谈。
请参阅:https : //developer.mozilla.org/en-US/docs/DOM/document.domain