簡體   English   中英

EXTJS Fileupload-IE8安全欄問題

[英]EXTJS Fileupload - Problem with IE8 security bar

我正在嘗試制作EXTJS應用程序以發送帶有附件的電子郵件。 因此,我有一個非常基本的形式,其中包括主題的文本字段,帶有inputType的另一個文本字段:附件的“文件”和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實體發送,因此將“ <”編碼為“ <”,將“&”編碼為“&”等。從文檔中檢索響應文本,並創建偽造的XMLHttpRequest對象包含responseText屬性,以便符合事件處理程序和回調的要求。 請注意,文件上傳數據包以內容類型multipart / form發送,某些服務器技術(尤其是JEE)可能需要進行一些自定義處理,以便從數據包內容中檢索參數名稱和參數值。

我認為我不了解那里的所有解釋...

-結束編輯-

謝謝阿蘭

在服務器端,即使看起來有些奇怪,您也必須執行以下操作:

  • 將響應類型設置為“ 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路徑(例如https://yousite.com/blank.html)來解決此問題。

我還沒有找到如何修改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',

...而isSecure是:

    isSecure = /^https/i.test(window.location.protocol);

這就是about:blank的來源。 如果這不起作用,聽起來您需要將該URL設置為適合您的內容(或者isSecure的值起作用了)。

按照您的建議和許多測試,這就是我所做的。 在將extall庫包括到https應用程序中的空白圖像之后,我便立即分配SSL_SECURE_URL常量。

Ext.SSL_SECURE_URL = 'https://mysite.com/blank.gif';

沒問題了。

非常感謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM