Relaxing the same-origin policy
在某些情况下,同源策略是使用多个子域大型网站过于严格,提出问题。这里有四个技巧放松吧:
document.domain property
如果两个窗口(或帧)包含设置域的值相同的脚本,同样的原产地政策放宽了这两个窗口,每个窗口可与其他人互动。例如,从orders.example.com和catalog.example.com加载的文档中的合作脚本可能会将其document.domain属性设置为“example.com”,从而使文档看起来具有相同的来源并使每个文档能够读取另一个的属性。这可能并不总是有效,因为存储在内部表示中的端口可能会被标记为空。换句话说,example.com端口80将变成example.com端口为空,因为我们更新了document.domain
。端口null可能不会被视为80(取决于您的浏览器),因此可能会失败或取决于您的浏览器成功。
Cross-Origin Resource Sharing
放松的同源策略的第二个技术被名跨来源资源共享下的标准化。本标准草案将HTTP扩展为新的Origin请求标头和新的Access-Control-Allow-Origin
响应标头。它允许服务器使用头来明确列出可能请求文件的起源或使用通配符并允许任何站点请求文件。诸如Firefox 3.5和Safari 4之类的浏览器使用这个新头来允许具有XMLHttpRequest的跨域HTTP请求,否则这些请求将被同源策略禁止。
Cross-document messaging
另一个新的技术中,跨文档消息收发允许脚本从一个页面到文本消息传递给脚本另一页上不管脚本起源。在窗口对象上调用postMessage()
方法异步触发该窗口中的"onmessage"
事件,从而触发任何用户定义的事件处理程序。一个页面中的脚本仍然无法直接访问其他页面中的方法或变量,但它们可以通过此消息传递技术安全地进行通信。
JSONP
JSONP允许网页通过添加<script>
元件,其装载从不同的域的JSON响应的页面从不同的域接收JSON数据。
函数调用是JSONP的“P” - 围绕纯JSON的“填充”,或者根据some“前缀”。根据约定,浏览器在其对服务器的请求中(例如,通常使用名称jsonp或回叫作为命名查询参数字段名称)提供回叫函数的名称作为命名查询参数值。,
<script type="application/javascript"
src="http://server2.example.com/Users/1234?jsonp=parseResponse">
</script>
在这个例子中,所接收的负载将是:
parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7});
你不能这样做,如果框架指向不同的域。 –
似乎iframe与父页面不在同一个域中。那么您无法访问内容。 –
如果它位于另一个域中,则可以使用Firebug CD命令进行开发:https://groups.google.com/forum/?fromgroups=#!topic/firebug/DvUvoLw-hOI(http://getfirebug.com/wiki/ index.php/Command_Line_API#cd.28window.29) – baptx