[英]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)可能需要進行一些自定義處理,以便從數據包內容中檢索參數名稱和參數值。
我認為我不了解那里的所有解釋...
-結束編輯-
謝謝阿蘭
在服務器端,即使看起來有些奇怪,您也必須執行以下操作:
響應類型使瀏覽器在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.