IE междоменный фильтр в приложении Flex - PullRequest
0 голосов
/ 22 января 2010

У меня есть приложение, которое использует гибкую форму для ввода пользовательского ввода. Когда пользователь вводит данные формы (которая включает в себя область рисования), приложение создает изображение формы в формате jpg и отправляет обратно на сервер. Поскольку данные являются конфиденциальными, он должен использовать https. Кроме того, клиент требует, чтобы и jpg, и pdf версии формы были сохранены на сервере.

Приложение отправляет данные обратно в три этапа

1 - отправить снимок jpg с номером заказа

2 - отправить поля данных формы в виде данных публикации, чтобы они не отображались в адресной строке

3 - отправить данные в формате PDF

Сначала я отправляю данные jpg с помощью urlloader и жду ответа сервера, прежде чем выполнить операции 2 и 3, чтобы убедиться, что сервер создал запись, связанную с новым порядковым номером.

Этот код отлично работает в IE через http. Но если я попытаюсь использовать приложение через https, IE блокирует ответ страницы из шага store jpg, и событие complete urlloader никогда не срабатывает. Приложение отлично работает в FireFox через http или https.

Вот файл crossdomain.xml (я заменил домен на ""):

<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

  <allow-access-from domain="*.<mydomain>.com" to-ports="*" secure="false"/>
  <allow-http-request-headers-from domain="*.<mydomain>.com" headers="*">

</cross-domain-policy> 

Вот код, который выполняется, когда пользователь нажимает кнопку отправки:

закрытая функция loaderCompleteHandler (событие: событие): void {

            sendPDF();
            sendPatientData();
        }


        private function submitOrder(pEvt:MouseEvent):void
        {
            //disable submit form so the order can't be submitted twice
            formIsValid = false;
            waitVisible = true;

            //submit the jpg image first with the order number, userID, provID
            //and order type.  The receiveing asp will create the new order record
            //and save the jpg file.  jpg MUST be sent first.
            orderNum = userID + "." + provID + "." + Date().toString() + "." + orderType;

            var jpgURL:String = "https://orders.mydomain.com/orderSubmit.asp?sub=jpg&userID=" + userID + "&provID=" + provID + "&oNum=" + orderNum + "&oType=" + orderType;

            var jpgSource:BitmapData = new BitmapData (vbxPrint.width, vbxPrint.height);
            jpgSource.draw(vbxPrint);
            var jpgEncoder:JPEGEncoder = new JPEGEncoder(100);
            var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);

            var header:URLRequestHeader = new URLRequestHeader ("content-type", "application/octet-stream");

            //Make sure to use the correct path to jpg_encoder_download.php
            var jpgURLRequest:URLRequest = new URLRequest (jpgURL);     
            jpgURLRequest.requestHeaders.push(header);              
            jpgURLRequest.method = URLRequestMethod.POST;               
            jpgURLRequest.data = jpgStream;

            //navigateToURL(jpgURLRequest, "_blank");

            var  jpgURLLoader:URLLoader = new URLLoader();

            try
            {
                jpgURLLoader.load(jpgURLRequest);
            }
            catch (error:ArgumentError)
            {
                trace("An ArgumentError has occurred.");
            }
            catch (error:SecurityError)
            {
                trace("A SecurityError has occurred.");
            }

            jpgURLLoader.addEventListener(Event.COMPLETE, loaderCompleteHandler);

        }


        private function sendPatientData ():void
        {
            var dataURL:String = "https://orders.mydomain.com/orderSubmit.asp?sub=data&oNum=" + orderNum + "&oType=" + orderType;

            //Make sure to use the correct path to jpg_encoder_download.php
            var dataURLRequest:URLRequest = new URLRequest (dataURL);       
            dataURLRequest.method = URLRequestMethod.POST;
            var dataUrlVariables:URLVariables = new URLVariables(); 

            dataUrlVariables.userID = userID
            dataUrlVariables.provID = provID
            dataUrlVariables.name = txtPatientName.text
            dataUrlVariables.dob = txtDOB.text
            dataUrlVariables.contact = txtPatientContact.text
            dataUrlVariables.sex=txtSex.text
            dataUrlVariables.ind=txtIndications.text

            dataURLRequest.data = dataUrlVariables
            navigateToURL(dataURLRequest, "_self");     

        }

        private function sendPDF():void
        {
            var url:String = "https://orders.mydomain.com/pdfOrderForm.asp"
            var fileName:String = "orderPDF.pdf&sub=pdf&oNum=" + orderNum + "&oType=" + orderType + "&f=2&t=1" + "&mid=" + ModuleID.toString()
            var jpgSource:BitmapData = new BitmapData (vbxPrint.width, vbxPrint.height);
            jpgSource.draw(vbxPrint);
            var jpgEncoder:JPEGEncoder = new JPEGEncoder(100);
            var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);

            myPDF = new PDF( Orientation.LANDSCAPE,Unit.INCHES,Size.LETTER);
            myPDF.addPage(); 
            myPDF.addImageStream(jpgStream,0,0, 0, 0, 1,ResizeMode.FIT_TO_PAGE );
            myPDF.save(Method.REMOTE,url,Download.ATTACHMENT,fileName);

        }

Целевая страница asp не отправляет обратно никаких данных, кроме базового шаблона страницы сайта.

Может кто-нибудь помочь мне разобраться, как обойти эту проблему междоменного IE? Я отключил фильтр XSS в настройках безопасности инструментов IE, но это все еще не решило проблему.

СПАСИБО

1 Ответ

1 голос
/ 22 января 2010

Делайте все через https. Загрузите SWF с URL-адреса https. Отправьте первоначальную форму сообщения через https. Отправить изображения через https.

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