1

我在整个 Javascript/Dojo 世界中慢慢变得更好。但是,我对整个 dojo/request/iframe 业务感到困惑。我知道在 Javascript 中,出于安全原因,您只能连接到源服务器。这是给定的。然而,当人们开始考虑“使用 iframe 来解决这个问题”时,我会非常迷茫。

Dojo/resources/blank.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 的单个空文件?!?)

我很困惑……迷路了。有人可以给我一点方向吗?

谢谢...

默克。

4

1 回答 1

3

好吧,我不知道该blank.html页面,但是我理解您问题的第二部分。据我所知,大多数(所有)浏览器都拒绝来自 XHR/JavaScript 的跨域请求,并且由于安全原因,它们也不能从文件上传表单元素发送数据。如果可能的话,黑客可以(通过注入一些 JavaScript)做一些可怕的事情,比如将数据发送到其他域或读取上传的文件。

要解决此问题,您可以使用 iframe。iframe 可以加载跨域页面,但问题是如果它是跨域请求,您不能简单地访问 iframe 的内容。但是,使用 JavaScript,您可以设置 iframe 的来源,因此您可以通过 iframe 发送数据。

文件也是一样,你不能直接发送它,但你可以通过 iframe 发送它们,因为你可以操纵 iframe 的作用(和发送数据)。

所以 TL;DR:浏览器会阻止您可以使用 JavaScript 执行的某些操作,例如:

  • 通过 XHR 跨域发送数据
  • 通过 XHR 读取文件数据
  • 读取跨域的 iframe 数据

因此,您可以执行以下操作:

  • 通过 iframe 发送跨域数据
  • 通过 iframe 读取文件数据
  • 读取不是跨域的 iframe

因此,只要不是跨域请求,您确实可以使用 iframe dojo 模块读取文件。

我希望我解释得足够好,可以理解。

于 2013-03-08T17:36:02.260 回答