Что заставляет IE8 блокировать загрузку некоторых файлов? - PullRequest
9 голосов
/ 29 марта 2012

Это вызывает некоторое горе у моих пользователей IE8.

На моем сайте у меня есть загрузки файлов, запускаемые с помощью php-скрипта (file_download.php? File = X123). На этой странице он записывает некоторые данные в базу данных, а затем использует заголовки для принудительной загрузки. Кажется, что все на этой странице прекрасно работает во всех браузерах.

Это то, как я называю эту страницу, и мне кажется, что она раздражает меня: «Чтобы защитить вашу безопасность - Internet Explorer заблокировал загрузку файлов на ваш компьютер».

Если я использую обычный тег href <a href="/file_download.php?file=X123">download</a>, он запускается корректно (без сообщения загрузки заблокированного IE).

Но когда я запускаю скрипт jQuery, он выдает мне это предупреждение.

Поэтому я подумал, что IE8 может быть подозрительным к перенаправлениям javascript, поэтому я сделал простую функцию JS на локальной странице, но это не сработало.

Так что, похоже, виновником может быть jQuery ... это потому, что событие window.location вызывается из другой страницы или источника скрипта? Кто-нибудь знает, как это работает?

Я продолжу тестирование, но пока кто-нибудь может пролить свет на эту проблему? Попросить пользователей настроить их параметры IE не вариант.

Спасибо

-------- jQuery Code --------------

            jQuery("a").click(function(e){

            if(jQuery(this).attr("href") !== undefined){

                downloadLink = jQuery(this).attr("href");
                thingClicked = jQuery(this);

                dll_io = downloadLink.indexOf("/file_download.php?file_id=");
                dll_io2 = downloadLink.indexOf("/file_download_safe.php?file_id=");


                    if(dll_io == 0 || dll_io2 == 0){

                        e.preventDefault();

                        jQuery.getScript("/includes/get_login.php?file_id=" + downloadLink + "&dll_io=" + dll_io + "&dll_io2=" + dll_io2 + "&last_url=" + document.URL, function(rp){
                            //get_login.php sets 'requested_dl_id' cookie

                            if(dll_io2 == 0){
                                window.location = downloadLink;
                            }else{  
                                if(rp == "allow"){
                                    window.location = downloadLink;
                                }else{
                                    jQuery("#download_prompt").click();
                                }
                            }//end condition: if file_download_safe -> set cookie and send to page. IF file_download -> set cookie and decide to prompt or not.

                        });
                    }//end if fd == file_download.php
            }//end only execute code if 'a' has a defined 'href' attribute

        });

---- ---- обновление

Теперь я достаточно образован, чтобы понять причину этой проблемы, но не нашел простого решения. Причина в том, что IE7 & 8 автоматически блокируют загрузки, которые запускаются из не пользовательских событий. Таким образом, событие onclick запустит загрузку, но не скрипт jQuery. Все еще в поисках обходного пути.

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

Я не могу включить "Чтобы помочь защитить вашу безопасность", но на основании эта статья window.location может быть виновником.

Вы пытались

$('<iframe>', {src:downloadLink}).appendTo('body');

вместо

window.location = downloadLink;
4 голосов
/ 29 марта 2012

Использование JavaScript для запуска загрузки - это распространенный способ распространения вредоносного ПО (например, рекламный баннер может вызвать загрузку на всех сайтах, на которых оно размещено).

Меня не удивляет, что это вызывает "красный флаг" и увеличивает меры предосторожности.

Я думаю, что ваш единственный вариант - не использовать JavaScript для запуска загрузки. Есть ли другой способ сделать это?

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