我在整个 Javascript/Dojo 世界中都在慢慢变得更好。但是,我对整个 dojo/request/iframe 业务感到困惑。 我知道在 Javascript 中,出于安全原因,您只能连接到原始服务器。这是一个给定的。然而,当人们开始考虑“使用 iframe 来解决这个问题”时,我感到很迷茫。
道场/资源/空白.html:
- 包含
<html><head><script>isLoaded = true;</script></head><body></body></html>
- 需要由与您的应用程序相同的服务器托管。因此,如果您从 CDN 使用 dojo,则需要将此 blank.html 文件保存在应用程序所在的同一台服务器上
页面http://livedocs.dojotoolkit.org/dojo/request/iframe解释,关于 iframe:
在发起调用页面的服务器以外的服务器上调用服务(跨域请求)。请注意,在这种情况下,无法读取响应主体:您可以发送数据,但不会收到任何回复。如果您需要访问返回数据,请参阅 dojo/request/script。
从表单上传文件(例如文件输入控件)。作为安全措施,普通的 XHR 机制无法访问文件选择标签引用的文件数据。 dojo/request/iframe 可以通过 IFrame 代理这些调用,从而仍然可以以异步方式进行文件上传。
一个空的 HTML 页面如何帮助我解决这个问题? (好吧,一个设置全局变量“isLoaded”的...?)
此外,在上面两点中解释了您无法检索响应之后,文档继续:
- 发出请求以检索某些 XML 的示例如下所示:
那么...您可以取回?
我想我需要退后一步,真正理解整个“使用 iframe 绕过跨域请求”以及真正理解“正常 XHR 机制”(什么机制?)无法访问数据的问题选择标签的引用(什么选择标签?请求主体中的数据不是吗?)可以通过 iFrame 代理这些调用(你的意思是设置 isLoaded 的单个空文件?!?)
我很困惑……迷路了。有人可以给我一些指导吗?
谢谢...
雇佣兵。
最佳答案
好吧,我不知道 blank.html
页面,但我理解你问题的第二部分。
据我所知,大多数(所有)浏览器都拒绝来自 XHR/JavaScript 的跨域请求,并且出于安全原因,它们也不能从文件上传表单元素发送数据。如果可能的话,黑客可以(通过注入(inject)一些 JavaScript)做一些可怕的事情,比如将数据发送到其他域或读取上传的文件。
要解决此问题,您可以使用 iframe。 iframe 可以加载跨域页面,但问题是如果是跨域请求,您不能简单地访问 iframe 的内容。但是,使用 JavaScript,您可以设置 iframe 的源,因此您可以通过 iframe 发送数据。
文件也一样,不能直接发送,但可以通过 iframe 发送,因为你可以操纵 iframe 的作用(和发送数据)。
所以 TL;DR:浏览器会阻止您可以使用 JavaScript 执行的某些操作,例如:
- 通过XHR跨域发送数据
- 通过XHR读取文件数据
- 读取跨域的iframe数据
因此您可以执行以下操作:
- 通过 iframe 发送跨域数据
- 通过iframe读取文件数据
- 读取不跨域的iframe
所以只要不是跨域请求,确实可以用iframe dojo模块读取文件。
我希望我解释得足够好,可以理解。
关于javascript - dojo/request/iframe 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295964/