mjs*_*mjs 86 javascript orbited
Orbited(Comet服务器)的客户端JS组件要求,如果服务器在与JS本身不同的域或端口上运行,则必须执行
document.domain = document.domain;
Run Code Online (Sandbox Code Playgroud)
在加载任何其他JS之前.(参见文档.)
这是做什么的?它看起来像一个NOOP!(我已经检查过了,事实上这是必要的.)
小智 198
我实际上写了这段代码.
当尝试执行跨子域/端口彗星时,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),然后所有内容都匹配,并且跨端口/子域框架通信正常工作.
cwe*_*kly 36
浏览器区分(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
| 归档时间: |
|
| 查看次数: |
73704 次 |
| 最近记录: |