EXTJS Fileupload - проблема с панелью безопасности IE8 - PullRequest
1 голос
/ 17 декабря 2010

Я пытаюсь создать приложение 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 показывает панель безопасности, говоря, что я пытаюсь загрузить файл на компьютер, что совершенно противоположно тому, что я делаю (я загружаю файл)!

Как я могу предотвратить срабатывание этой панели безопасности?

- РЕДАКТИРОВАТЬ 18 декабря 2010 г. 16:48 EST-- Возможно ли, что это может быть вызвано этим: (исходя из документации EXTJS basicForm)

Загрузка файлов не выполняется с использованием обычных методов Ajax, то есть они не выполняются с использованием запросов XMLHttp. Вместо этого форма отправляется стандартным способом с временно измененным элементом DOM, чтобы его цель была установлена ​​для ссылки на динамически сгенерированный скрытый элемент, который вставляется в документ, но удаляется после сбора возвращаемых данных. Ответ сервера анализируется браузером для создания документа для IFRAME. Если сервер использует JSON для отправки возвращаемого объекта, то заголовок Content-Type должен быть установлен на «text / html», чтобы указать браузеру вставлять текст без изменений в тело документа. Символы, которые важны для анализатора HTML, должны отправляться как объекты HTML, поэтому кодируйте «<» как «<», «&» как «&» и т. Д. Текст ответа извлекается из документа и создается поддельный объект XMLHttpRequest содержащий свойство responseText для соответствия требованиям обработчиков событий и обратных вызовов. Имейте в виду, что пакеты загрузки файлов отправляются с типом содержимого multipart / form, и некоторые серверные технологии (особенно JEE) могут требовать некоторой пользовательской обработки для получения имен параметров и значений параметров из содержимого пакета. </p>

Не думаю, что я все понимаю в объяснении ...

- КОНЕЦ РЕДАКТИРОВАНИЯ -

Спасибо Alain

Ответы [ 4 ]

6 голосов
/ 19 декабря 2010

На стороне сервера вы ДОЛЖНЫ сделать следующее, даже если это выглядит немного странно:

  • установить тип ответа "text / html"
  • send {"success ": true} как объект JSON

тип ответа заставляет браузер отображать ответ в iframe. ExtJS использует ExtJS, читает его из DOM и интерпретирует как JSON, ища поле успеха.

2 голосов
/ 18 января 2011

Это то, что 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. Любая помощь будет приветствоваться

1 голос
/ 30 января 2011

Я думаю, что 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);

Так вот, откуда вы: пусто. Если это не сработает, похоже, вам нужно установить этот URL-адрес на то, что работает для вас (или, возможно, значение isSecure действует).

0 голосов
/ 13 февраля 2011

следуя вашим предложениям и множеству тестов, вот что я сделал. Я просто назначаю константы SSL_SECURE_URL сразу после включения библиотеки extall в пустое изображение в моем приложении https.

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

Больше никаких проблем.

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...