2011-11-03 137 views
29

如何在Firefox中修复此消息?我正在使用具有锚标签的Iframe?我想获得对这种定位的一个参考,但我收到的时候我试图访问锚此错误:错误:权限被拒绝访问属性“文档”

var frameWindow = document.getElementById('myIframe').contentWindow; 
var anchor = frameWindow.document.links[0]; //.getElementsByClassName('a'); 
anchor.onclick.... 
+2

你不能这样做,如果框架指向不同的域。 –

+0

似乎iframe与父页面不在同一个域中。那么您无法访问内容。 –

+2

如果它位于另一个域中,则可以使用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

回答

10

如果在iframe指向不同的域名,你会得到这个错误。这是您的浏览器防止跨站点脚本的例子:http://en.wikipedia.org/wiki/Cross-site_scripting

+28

这是好的,丹迪,但OP想知道如何解决它。 – Noz

+5

@TarynEast Baptx的评论是一个更好的答案,至少它试图提供一个解决方案。尽管我甚至可能会建议easyXDM之类的东西。 – Noz

22

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}); 
相关问题