1

仅限 GX​​T 3.x。

有人可以分析和解释 FileUploadField 中三个私有字段之间的联系吗?

具体来说,

  1. 会触发文件输入显示的按钮的 onclick 动作在哪里?如果不是在哪里,那么如何。
  2. fileinput.getValue() 如何传输到文本输入小部件?

如果你能回答上述问题,你应该能回答这个问题……(但如果你没有提供上述两个问题的答案,请不要回答这个问题)。以下陈述是真实的、有些真实的还是偶然的?

  • GXT 故意使以编程方式触发按钮 onclick 成为不可能,因为安全问题不应允许以编程方式触发文件输入元素。
  • 如果这是真的,(为什么?)无论如何,我仍然可以以编程方式访问按钮和文件输入元素。没有人能阻止我或任何人。

编辑
好的,不要介意第 2 项:文件输入值在 onChange 方法中传输到文本输入。

4

1 回答 1

2
  1. 空无一人。<input type=file>在“真实”按钮的顶部有一个不可见的涂漆。当您单击它时,会出现对话框 - 单击“点击”<input type=file>而不是按钮,但onBrowserEvent告诉按钮的行为就像它被单击一样。据我所知,这是访问浏览器提供的文件系统(即“选择文件”)的唯一方法(至少支持没有新文件 api、flash 或其他插件的浏览器)。

  2. 向页面上的<input type=file>javascript 公开对名称(可能是也可能不是完整的,甚至是真实的)的访问权限。正如您所注意到的,这在输入本身的 DOM 更改事件中可用。只有文件名可用(同样,没有文件 api),它可能有假路径(即 IE)或没有路径(其他人)。

  3. 这不是与 GXT 有任何关系的安全问题 - 相反,领域 dom 的 rube-goldberg 布局是为了处理浏览器的安全限制。使用privateon<input>只是明确表示您不应该直接访问它,并且没有任何意义阻止您阅读它。如果子类化 this,则继续getFileInput(),否则,使用 JSNI 和所谓的 violator 模式来获取对文件字段或该方法的引用。

  4. 是的 - 这不是关于安全性,而是关于编写可维护的代码。另请参阅https://stackoverflow.com/a/2954949/860630

于 2013-05-20T23:44:33.747 回答