Javascript &引用;“访问被拒绝”;访问iframe文档对象时出错
为了在具有许多参数的表单中发布AJAX表单,我使用了一种解决方案,即创建Javascript &引用;“访问被拒绝”;访问iframe文档对象时出错,javascript,ajax,iframe,Javascript,Ajax,Iframe,为了在具有许多参数的表单中发布AJAX表单,我使用了一种解决方案,即创建iframe,通过POST将表单发布到表单中,然后访问iframe的内容。 具体而言,我访问的内容如下: $("some_iframe_id").get(0).contentWindow.document 我测试了它,它成功了 在一些页面上,我开始出现“访问被拒绝”错误。据我所知,如果iframe是从同一个域提供的,那么这种情况就不会发生 我敢肯定它以前是有效的。有人有线索吗 如果我不够清楚:我是在同一个域名上发帖。所以这
iframe
,通过POST将表单发布到表单中,然后访问iframe
的内容。
具体而言,我访问的内容如下:
$("some_iframe_id").get(0).contentWindow.document
我测试了它,它成功了
在一些页面上,我开始出现“访问被拒绝”错误。据我所知,如果iframe是从同一个域提供的,那么这种情况就不会发生
我敢肯定它以前是有效的。有人有线索吗
如果我不够清楚:我是在同一个域名上发帖。所以这不是一个跨域请求。我只测试IE
另外,我不能使用简单的ajax POST查询(不要问…)基本上,当框架内和框架外的文档具有不同的域时,会发生此错误。因此,为了防止跨端脚本,浏览器将禁用此类执行。如果是域问题(或子域),如www.foo.com向www.api.foo.com发送请求 在每个页面上,您可以设置
document.domain = www.foo.com
允许“跨域”权限我自己解决了
问题是,即使发送的是正确的响应(通过Fiddler验证),但发送的却是HTTP 500错误代码(而不是200)
因此,如果发送带有错误代码的响应,即用从磁盘加载的错误消息(
res://ieframe.dll/http_500.htm
),这会导致跨域访问被拒绝错误。我知道这个问题太老了,但是我想说的是,上面的答案对我很有用:在每个页面上设置document.domain是相同的——父页面和iframe页面。然而,在我的搜索中,我确实发现了这篇有趣的文章:
注意与iFrame相关的安全限制,如跨域限制(又称CORS)。以下是与CORS相关的3个常见错误:
我的问题是
X-Frame-Options
HTTP头。我的Apache配置将其设置为:
Header always append X-Frame-Options DENY
移除它可以让它工作。特别是在我的例子中,我使用iframe transport for jQuery和jQuery文件上传插件来上传IE 9和IE 10中的文件。注意,如果您的iframe带有
src='javascript:void(0)“
然后类似于frame.document.location=…
的javascript将失败,IE中出现拒绝访问错误。正在使用与目标帧交互的javascript库。尽管它试图将帧更改为的位置与父帧位于同一个域中,但iframe最初设置为javascript:void,这触发了跨域访问拒绝错误
为了解决这个问题,我在我的站点中创建了一个BLACK.html页面,如果我需要先声明一个iFrAMP,最初将是空白的,直到通过JavaScript更改,然后我指向空白页,以便<代码> SRC=‘/Cyt/BLASE.html’在同一个域中。
或者,您可以完全通过javascript创建iframe,以便在创建时设置src,但在我的例子中,我使用的库要求在页面上声明iframe。我正在发布到同一个域。我正在使用fileupload.js上传文件(它使用iframe)。看起来我也有同样的问题,但我不确定是什么原因造成的。看起来只是超时问题。你是怎么阻止的?我不确定我是否理解这个问题。在任何情况下,如果您认为它与我的解决方案有关,那么您应该查看返回的HTTP代码以及上传的响应。谢谢。在我的例子中,如果上传的文件包含错误(一些验证),我将返回
400错误请求。它导致“访问被拒绝”错误。此文件替换是由“友好错误消息”功能导致的,您的响应小于512字节。这里的细节:我在我的环境中面临同样的问题。将X-Frame-Options设置为SameOrgin为我解决了这个问题