错误:访问属性“文档”的权限被拒绝

IT技术 javascript
2021-01-16 02:10:30

如何在 Firefox 中修复此消息?我正在使用带有锚标记的 Iframe?我想获得对此锚点的引用,但在尝试访问锚点时出现此错误:

var frameWindow = document.getElementById('myIframe').contentWindow;
var anchor = frameWindow.document.links[0]; //.getElementsByClassName('a');
anchor.onclick....
3个回答

放宽同源政策

在某些情况下,同源策略过于严格,会给使用多个子域的大型网站带来问题。这里有四种放松它的技巧:

document.domain 属性

如果两个窗口(或框架)包含将 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 请求,否则这些请求会被同源策略禁止。[7]

跨文档消息传递

另一种新技术,跨文档消息传递允许来自一个页面的脚本将文本消息传递到另一个页面上的脚本,而不管脚本来源如何。postMessage()异步调用Window 对象上方法会触发"onmessage"该窗口中事件,从而触发任何用户定义的事件处理程序。一个页面中的脚本仍然无法直接访问另一页面中的方法或变量,但它们可以通过这种消息传递技术安全地进行通信。

JSONP

JSONP 允许页面通过向<script>页面添加一个元素来从不同的域接收 JSON 数据,该元素从不同的域加载 JSON 响应。

函数调用是 JSONP 的“P”——围绕纯 JSON 的“填充”,或者根据某些“前缀”。按照惯例,浏览器在向服务器的请求中提供回调函数的名称作为命名查询参数值,通常使用名称 jsonp 或回调作为命名查询参数字段名称,例如,

<script type="application/javascript"
        src="http://server2.example.com/Users/1234?jsonp=parseResponse">
</script>

在这个例子中,接收到的有效载荷是:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7});
我遇到了完全相同的问题,我的回答帮助了我和其他 22 个人,Areeb。
2021-03-30 02:10:30
最令人沮丧的答案之一,因为它只是来自维基百科的 C&P,没有回答 OP 真正需要的是基于他们实际代码的解决方案。
2021-03-31 02:10:30

如果 iframe 指向不同的域,您将收到此错误。这是您的浏览器阻止跨站点脚本的示例:http : //en.wikipedia.org/wiki/Cross-site_scripting

这很好,很花哨,但 OP 想知道如何绕过它。
2021-03-23 02:10:30
我评论中提到的@Noz Firebug CD 命令不能再使用了,但我分享了一个新的解决方法:stackoverflow.com/questions/7995223/...
2021-04-01 02:10:30
@TaynEast Baptx 的评论是一个更好的答案,至少它试图提供一个解决方案。虽然我什至可能会建议像easyXDM这样的东西。
2021-04-04 02:10:30

该错误是由于其他答案中解释的同源策略所致。我发布此答案作为在 Web 控制台中执行 JavaScript 代码的解决方法。

我建议使用 Firebug CD 命令的评论不再有效,因为不再支持 Firebug。

但是 Firefox 开发者工具中有一个类似的功能,您可以通过选择 iframe 上下文选择器按钮来切换域名,如下所述:https : //developer.mozilla.org/en-US/docs/Tools/Working_with_iframes