我在整个Javascript / Dojo世界中慢慢变得更好。但是,我对整个dojo / request / iframe业务感到困惑。 我知道在Javascript中,出于安全原因,您只能连接到源服务器。这是给定的。然而,当人们开始采用“使用iframe来解决这个问题”时,我会迷失方向。
Dojo / resources / blank.html:
<html><head><script>isLoaded = true;</script></head><body></body></html>
http://livedocs.dojotoolkit.org/dojo/request/iframe页解释了iframe:
在发起调用页面的服务器之外的服务器上调用服务(跨域请求)。请注意,在这种情况下,无法读取响应正文:您可以发送数据,但不能获得任何回复。如果需要访问返回数据,请参阅dojo / request / script。
从表单上传文件(例如文件输入控件)。正常的XHR机制无法访问文件选择标记引用的文件数据作为安全措施。 dojo / request / iframe可以通过IFrame代理这些调用,从而可以以异步方式进行文件上传。
空HTML页面如何帮助我? (好吧,设置一个全局变量“isLoaded”......?)
此外,在上述两点解释您无法检索回复之后,文档继续:
那么......你可以检索?
我认为我需要退后一步并真正理解整个“使用iframe来解决跨域请求”以及实际理解“正常XHR机制”(什么机制?)无法访问数据的问题选择标签的引用(什么选择标签?并且不是请求体中的数据?)可以通过iFrame代理这些callls(你的意思是设置isLoaded的单个空文件?!?)
我很困惑......迷路了。有人可以给我一点方向吗?
谢谢...
Merc的。
答案 0 :(得分:3)
好吧,我不知道blank.html
页面,但问题的第二部分是我理解的。
据我所知,大多数(所有)浏览器都拒绝来自XHR / JavaScript的跨域请求,并且由于安全原因,它们也不能从文件上载表单元素发送数据。如果有可能,黑客可以(通过注入一些JavaScript)做一些可怕的事情,比如将数据发送到其他域或读取上传的文件。
要解决此问题,您可以使用iframe。 iframe可以加载跨域页面,但问题是如果它是跨域请求,您不能简单地访问iframe的内容。但是,使用JavaScript,您可以设置iframe的来源,从而可以通过iframe发送数据。
与文件同样的事情,你不能直接发送,但你可以通过I帧给他们,因为你可以操纵什么I帧做(和发送数据)。
所以TL; DR:浏览器阻止你可以用JavaScript做的某些事情:
所以你可以做以下事情:
因此,您确实可以使用iframe dojo模块读取文件,只要它不是跨域请求。
我希望我解释得很清楚。