Internet Explorer "Ошибка безопасности" - PullRequest
1 голос
/ 27 июля 2011

я использую uploadify 2.1.4, http://www.uploadify.com

местный js:

jQuery('#file_upload').uploadify({
   'buttonImg' : 'public/uploadify/newfile.png',
   'uploader' : 'http://remoteserver/uploadify.swf',
   'scriptAccess' : 'always', ...

на удаленном сервере у меня есть кросс-домен:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

Я редактирую uploadify.fla и помещаю этот код:

import flash.system.Security;
...
Security.allowDomain("*");

и создайте новый uploadify.swf

Проблема в следующем: работать с Firefox, Safari, Chrome e Opera, но в IE (v7, v8, v9 (я не тестирую с v6)) по-прежнему получаю сообщение об ошибке: Ошибка безопасности (в .uploadifyQueueItem)

Ответы [ 4 ]

0 голосов
/ 04 февраля 2016

Привет, я получил решение от другого вопроса. динамически устанавливаемые свойства при загрузке

Добавьте нижеприведенное свойство, чтобы избежать исключения безопасности в IE8

  'method' : 'GET',

Это работает для меня сейчас.Мой общий код выглядит так, как показано ниже

$('#file_uploads').uploadify({
        'onUploadSuccess': function (file, data, response) {
            $scope.uploadedFileList.push(JSON.parse(data)[0].files);
            $scope.$apply();
        },
        'onQueueComplete': function (queueData) {

        },
        'onDialogClose': function (queueData) {
            //            console.log(queueData);
            if (queueData.filesSelected > 5 || (queueData.filesSelected + $scope.uploadedFileList.length) > 5) {
                bootbox.alert({
                    title: CommonUtility.errorLabel,
                    message: "Maximum 5 files allowed.",
                    callback: function () {

                    }
                });
                $('#file_uploads').data('uploadify').queueData = "";
            } else if (queueData.queueSize > 5000000) {
                bootbox.alert({
                    title: CommonUtility.errorLabel,
                    message: "Total file size should not exceed 5 MB",
                    callback: function () {

                    }
                });
            } else
                $('#file_uploads').uploadify('upload', '*');
        },
        'auto': false,
        'fileTypeExts': '*.gif; *.jpg; *.png; *.doc; *.pdf; *.xls; *.zip;',
        'scriptAccess': 'always',
        'swf': 'assets/css/uploadify.swf',
        'uploader': 'uploadfile',
        'method': 'GET',
        'buttonText': 'Browse',
    });
0 голосов
/ 15 августа 2011

Я решил эту проблему:

в моем js:

jQuery('#file_upload').uploadify({
  script: '/upload',
  uploader: 'http://domain.com/uploadify.swf'

Но, когда напечатано (requestURL.url) в uploadify.swf, ставится: "http://www.domain.com/upload";, тогдаflash вызывает ошибку безопасности, потому что "http://www.dom. .."! = "http://dom. .."

0 голосов
/ 18 марта 2012

Я не следил за тем, как вы исправили проблему безопасности IE при загрузке файлов с одного сервера на другой.

Мой uploadify.swf размещен на сервере 1, а скрипт загрузки php - на сервере 2. Crossdomain.xmlНа сервере 2 есть директивы, разрешающие загрузку.

Отлично работает в FF, Chrome, Safari, но IE вызывает блокировку безопасности.

Спасибо, Мелвин

0 голосов
/ 27 июля 2011

Я не уверен, почему вы будете использовать jquery для загрузки на сервер, если вы можете сделать это прямо с флэш-памяти (поскольку вы все равно уже используете флэш-память).Вот как я это делаю, и у меня нет проблем в IE.Извините, я не могу ответить на ваш вопрос напрямую, я не знаю достаточно JQuery.

 var request:URLRequest = new URLRequest( "http://remoteserver/uploadify.swf" );
 request.data = myjpeg;
 request.contentType = "image/jpeg";
 request.method = URLRequestMethod.POST;
 var loader:URLLoader = new URLLoader(  );
 loader.addEventListener( Event.COMPLETE, handleResponse );
 loader.load( request );
 function handleResponse (evt:Event) { 
 trace(evt.target.data); //print response from server if there is one
 }
...