访问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