错误:权限被拒绝访问属性“文档”
我怎样才能解决这个消息在Firefox? 我正在使用一个具有锚标签的Iframe? 我想获得对这个锚点的引用,但是当我试图访问锚点时,我得到这个错误:
var frameWindow = document.getElementById('myIframe').contentWindow; var anchor = frameWindow.document.links[0]; //.getElementsByClassName('a'); anchor.onclick....
放宽同源政策
在某些情况下,同源策略的限制性过大,会对使用多个子域名的大型网站造成问题。 这里有四个放松的技巧:
document.domain属性
如果两个窗口(或框架)包含将域设置为相同值的脚本,则这两个窗口放宽同源策略,并且每个窗口都可以与另一个窗口交互。 例如,从orders.example.com和catalog.example.com加载的文档中的合作脚本可能会将其document.domain属性设置为“example.com”,从而使文档看起来具有相同的来源并使每个文档都可以阅读其他属性。 这可能不总是工作,因为存储在内部表示中的端口可能被标记为空。 换句话说,example.com端口80将成为example.com端口null,因为我们更新了document.domain
。 端口null可能不被视为80(取决于您的浏览器),因此可能会失败或取决于您的浏览器成功。
跨源资源共享
放宽同源政策的第二项技术正在以“跨源资源共享”的名义进行标准化。 该标准草案通过一个新的Origin请求头和一个新的Access-Control-Allow-Origin
响应头扩展了HTTP。 它允许服务器使用一个头来显式地列出可能请求文件的来源或使用通配符,并允许任何站点请求文件。 浏览器(如Firefox 3.5和Safari 4)使用这个新的标头来允许具有XMLHttpRequest的跨域HTTP请求,否则这些请求将被同源策略禁止。
跨文档消息
另一项新技术即交叉文档消息传递允许来自一个页面的脚本将文本消息传递到另一个页面上的脚本,而不pipe脚本的起源如何。 在Window对象上调用postMessage()
方法asynchronous地触发该窗口中的"onmessage"
事件,触发任何用户定义的事件处理程序。 一个页面中的脚本仍然不能直接访问其他页面中的方法或variables,但是它们可以通过这种消息传递技术安全地进行通信。
JSONP
JSONP允许页面通过向从不同域加载JSON响应的页面添加<script>
元素从另一个域接收JSON数据。
函数调用是JSONP的“P” – 围绕纯JSON的“填充”,或根据某些 “前缀”。 按照惯例,浏览器在其对服务器的请求中提供callback函数的名称作为命名查询参数值,通常使用名称jsonp或回叫作为命名查询参数字段名称,例如,
<script type="application/javascript" src="http://server2.example.com/Users/1234?jsonp=parseResponse"> </script>
在这个例子中,收到的有效负载将是:
parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7});
如果iframe指向一个不同的域,你将会得到这个错误。 这是您的浏览器防止跨站点脚本的示例: http : //en.wikipedia.org/wiki/Cross-site_scripting