Javascript EXTJS文件上传-IE8安全条存在问题

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

我正在尝试制作一个EXTJS应用程序来发送带有附件的电子邮件。所以我有一个非常基本的表单,其中包括主题的textfield,另一个带有inputType的textfield,附件的“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显示了安全条,上面说我正试图将一个文件下载到计算机上,这与我正在做的完全相反(我正在上传一个文件)

如何防止触发此安全栏

--编辑2010年12月18日美国东部时间16:48-- 是否可能是由以下原因引起的:(来自EXTJS basicForm文档)


文件上载不是使用普通的“Ajax”技术执行的,也就是说,它们不是使用XMLHttpRequests执行的。相反,表单是以标准方式提交的,DOM元素被临时修改,以将其目标设置为引用动态生成的隐藏表单,该表单插入到文档中,但在收集返回数据后被删除。浏览器解析服务器响应以创建IFRAME的文档。如果服务器使用JSON发送返回对象,则必须将内容类型标题设置为“text/html”,以便通知浏览器将未更改的文本插入到文档正文中。对于HTML解析器来说非常重要的字符必须作为HTML实体发送,因此在服务器端编码“,即使看起来有点奇怪,也必须执行以下操作:

  • 将响应类型设置为“text/html”
  • 将{“success”:true}作为JSON对象发送
响应类型使浏览器在iframe ExtJS使用的文件中呈现响应
ExtJS从DOM中读取,并将其解释为JSON,查找成功字段。

在服务器端,您必须执行以下操作,尽管它看起来有点奇怪:

  • 将响应类型设置为“text/html”
  • 将{“success”:true}作为JSON对象发送
响应类型使浏览器在iframe ExtJS使用的文件中呈现响应
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起作用