Javascript EXTJS文件上传-IE8安全条存在问题
我正在尝试制作一个EXTJS应用程序来发送带有附件的电子邮件。所以我有一个非常基本的表单,其中包括主题的textfield,另一个带有inputType的textfield,附件的“file”,还有一个html编辑器Javascript EXTJS文件上传-IE8安全条存在问题,javascript,ajax,internet-explorer,file-upload,extjs,Javascript,Ajax,Internet Explorer,File Upload,Extjs,我正在尝试制作一个EXTJS应用程序来发送带有附件的电子邮件。所以我有一个非常基本的表单,其中包括主题的textfield,另一个带有inputType的textfield,附件的“file”,还有一个html编辑器 var panel = new Ext.form.FormPanel({ fileUpload:true, labelAlign: 'right', monitorValid: true, border: false, bod
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显示了安全条,上面说我正试图将一个文件下载到计算机上,这与我正在做的完全相反(我正在上传一个文件)
如何防止触发此安全栏
--编辑2010年12月18日美国东部时间16:48--
是否可能是由以下原因引起的:(来自EXTJS basicForm文档)
文件上载不是使用普通的“Ajax”技术执行的,也就是说,它们不是使用XMLHttpRequests执行的。相反,表单是以标准方式提交的,DOM元素被临时修改,以将其目标设置为引用动态生成的隐藏表单,该表单插入到文档中,但在收集返回数据后被删除。浏览器解析服务器响应以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将内容类型标题设置为“text/html”,以便通知浏览器将未更改的文本插入到文档正文中。对于HTML解析器来说非常重要的字符必须作为HTML实体发送,因此在服务器端编码“,即使看起来有点奇怪,也必须执行以下操作:
- 将响应类型设置为“text/html”
- 将{“success”:true}作为JSON对象发送
ExtJS从DOM中读取,并将其解释为JSON,查找成功字段。在服务器端,您必须执行以下操作,尽管它看起来有点奇怪:
- 将响应类型设置为“text/html”
- 将{“success”:true}作为JSON对象发送
ExtJS从DOM中读取,并将其解释为JSON,查找成功字段。这是Ext写入文档的内容
<iframe id="ext-gen170" name="ext-gen170" class="x-hidden" src="about:blank"><html><head></head><body></body></html></iframe>
可以通过设置有效的https src路径来解决此问题,例如
我还没有找到如何修改src。欢迎提供任何帮助这是Ext写入文档的内容
<iframe id="ext-gen170" name="ext-gen170" class="x-hidden" src="about:blank"><html><head></head><body></body></html></iframe>
可以通过设置有效的https src路径来解决此问题,例如
我还没有找到如何修改src。欢迎提供任何帮助我相信ExtJs正在这样做:
if(Ext.isIE) {
frame.src = Ext.SSL_SECURE_URL;
}
其中,该字符串定义为:
/**
* URL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent
* the IE insecure content warning (<tt>'about:blank'</tt>, except for IE in secure mode, which is <tt>'javascript:""'</tt>).
* @type String
*/
SSL_SECURE_URL : isSecure && isIE ? 'javascript:""' : 'about:blank',
所以这就是你的“关于:空白”来自哪里。
如果这不起作用,听起来您需要将该URL设置为适合您的URL(或者isSecure的值可能有问题)。我相信ExtJs正在这样做:
if(Ext.isIE) {
frame.src = Ext.SSL_SECURE_URL;
}
其中,该字符串定义为:
/**
* URL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent
* the IE insecure content warning (<tt>'about:blank'</tt>, except for IE in secure mode, which is <tt>'javascript:""'</tt>).
* @type String
*/
SSL_SECURE_URL : isSecure && isIE ? 'javascript:""' : 'about:blank',
所以这就是你的“关于:空白”来自哪里。
如果这不起作用,听起来您需要将该URL设置为适合您的内容(或者可能是isSecure的值出现问题)。根据您的建议和许多测试,下面是我所做的。我只是在将extall库包含到https应用程序的空白图像后,立即将SSL\u SECURE\u URL常量指定给它
Ext.SSL_SECURE_URL = 'https://mysite.com/blank.gif';
没问题了
非常感谢。根据您的建议和许多测试,下面是我所做的。在我将extall库包含到https应用程序上的空白图像之后,我刚刚分配了SSL\u SECURE\u URL常量
Ext.SSL_SECURE_URL = 'https://mysite.com/blank.gif';
没问题了
非常感谢。谢谢,但这正是我正在做的。我重新验证,我的服务器生成:@products(value={“application/json”,“text/html”}),我返回一个带有“succes”的hashmap:true。奇怪的是,它在FF中工作得很好……如果去掉“application/json”怎么办“事情?我对你的答案投了一票,因为它解决了部分问题。如果应用程序/json不存在,则会产生真正的差异。IE不再弹出安全消息。我不完全理解此解决方法的性质,但它在IE8中对我有效。感谢为我工作,我正在使用Ext 5,我不明白为什么此错误尚未修复。谢谢,但这正是我正在做的。我重新验证,我的服务器生成:@products(value={“application/json”,“text/html”}),我返回一个带有“succes”的hashmap:true。奇怪的是,它在FF中工作得非常好……如果去掉“application/json”这个词呢?我对你的答案投了一票,因为它解决了部分问题。如果应用程序/json不存在,则会产生真正的差异。IE不再弹出安全消息。我不完全理解此解决方法的性质,但它在IE8中对我有效。感谢为我工作,我使用Ext 5,我不明白为什么这个错误还没有被修复。设置src不起作用,但它通过将响应内容类型设置为text\html起作用设置src不起作用,但通过将响应内容类型设置为text\html起作用