我正在尝试制作EXTJS应用程序以发送带有附件的电子邮件。因此,我有一个非常基本的表单,其中包括主题的文本字段,带有inputType:附件的’file’的另一个文本字段以及html编辑器。
var panel = new Ext.form.FormPanel({ fileUpload:true, labelAlign: 'right', monitorValid: true, border: false, bodyBorder: false, defaults:{ anchor: '100%', labelStyle: 'font-weight:bold;' }, items: [ { xtype: 'textfield', fieldLabel: 'SUBJECT', name: 'subject', allowBlank: false }, { xtype: 'textfield', fieldLabel: 'ATTACHMENT', name: 'file_to_upload', anchor: '80%', itemCls: 'attachment-field', allowBlank: true, inputType:'file' }, { xtype: 'htmleditor', fieldLabel:'MESSAGE', name:'msg' } ] });
并将此表单放置在将提交给服务器的窗口中:
var window = new Ext.Window({ title: 'Compose a message', height: 600, width: 800, autoScroll: true, border: false, bodyBorder: false, items: panel, buttons:[ { text: 'Send', formBind: true, handler: function() { panel.getForm().submit({ url: *Call to the server*, method : 'POST', timeout: 300000, // 5min waitMsg: 'Please wait while we send your email', success :function(form, action) { window.close(); } }); } }, { text: 'Close', handler: function() { window.close(); } } ] });
当我使用FF将表单提交到服务器时,一切工作都很好。但是IE8会出现问题。IE显示安全栏,表示我正在尝试将文件下载到计算机,这与我正在做的事情(我正在上传文件)完全相反!
如何防止触发此安全栏?
--EDIT 2010年12月18日,美国东部时间16:48–是否可能由以下原因引起:(来自EXTJS basicForm文档)
文件上传不是使用常规的“ Ajax”技术执行的,也就是说,它们不是使用XMLHttpRequests执行的。而是以标准方式提交表单,并临时修改DOM元素,使其目标设置为引用动态生成的隐藏对象,该对象将插入文档中,但在收集返回数据后将其删除。服务器响应由浏览器解析,以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将Content- Type标头设置为“ text / html”,以告知浏览器将未更改的文本插入文档主体。对于HTML解析器重要的字符必须作为HTML实体发送,因此将“ <”编码为“ <”,将“&”编码为“&”等。从文档中检索响应文本,并创建一个包含responseText属性的伪XMLHttpRequest对象,以便符合事件处理程序和回调的要求。请注意,文件上传数据包以内容类型multipart / form发送,某些服务器技术(特别是JEE)可能需要进行一些自定义处理,以便从数据包内容中检索参数名称和参数值。
我认为我不了解那里的所有解释…
-结束编辑-
谢谢阿兰
这就是Ext写入文档的内容。
<iframe id="ext-gen170" name="ext-gen170" class="x-hidden" src="about:blank"><html><head></head><body></body></html></iframe>
可以通过设置有效的https src路径来解决此问题,例如https://yousite.com/blank.html
我还没有找到如何修改src的方法。任何帮助都将受到欢迎