访问iframe文档对象时出现"访问被拒绝"错误

时间:2020-03-06 14:54:12  来源:igfitidea点击:

为了在具有许多参数的表单中发布AJAX表单,我使用一种创建iframe的解决方案,通过POST将表单发布到其中,然后访问iframe的内容。
具体来说,我正在访问这样的内容:

$("some_iframe_id").get(0).contentWindow.document

我对其进行了测试,并且效果良好。

在某些页面上,我开始出现"访问被拒绝"错误。据我所知,如果iframe是从同一域提供的,则不应发生这种情况。

我很确定它以前可以正常工作。有人知道吗?

如果我不够清楚:我要发布到同一个域。因此,这不是跨域请求。我仅在IE上进行测试。

P.S.我不能使用简单的ajax POST查询(不要问...)

解决方案

基本上,当框架内和ii外的文档具有不同的域时,会发生此错误。因此,为防止跨脚本编写,浏览器请禁用此类执行。

如果是域问题(或者子域),例如www.foo.com,则将请求发送到www.api.foo.com

在每个页面上,我们都可以设置

document.domain = www.foo.com

允许"跨域"权限

自己解决!

问题是,即使发送了正确的响应(已通过Fiddler验证),也使用HTTP 500错误代码(而不是200)发送了该响应。

事实证明,如果发送的响应带有错误代码,则IE会用从磁盘加载的错误消息(res://ieframe.dll/http_500.htm)替换iframe的内容,并且导致跨域访问被拒绝错误。

我知道这个问题太旧了,但是我想提一下上面的答案对我有用:将document.domain设置为在每个页面(父页面和iframe页面)上都相同。但是,在搜索中,我确实找到了这篇有趣的文章:

http://softwareas.com/cross-domain-communication-with-iframes