Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Target в IE
 
 автор: mikado3333   (26.08.2013 в 09:54)   письмо автору
 
 

Приветствую!

Есть форма

<form name="Zagryzka" action="../Zagryzka_faula.php" target="Zagryzka" method="post"enctype="multipart/form-data">
            <fieldset class = "ramka_Z"><legend align="center">ЗАГРУЗКА ФАЙЛА</legend>    
                <div class = "div_vf">
                    <input type="file" name="userfile" id="file">
                    <input type="button" onclick= "document.Zagryzka.userfile.click();" value = "ВЫБЕРИТЕ ФАЙЛ" class = 'but_vf'>
                </div>    
                <input type="button" value="ЗАГРУЗИТЬ"  onclick="fv_Zagryzka1();" class = 'but_zag'>
            </fieldset>     
            </form>


и функция оправляющая форму скрипту загрузки


    function fv_Zagryzka1()                                                                                                     //загрузка файла 
            {
                var str = "menubar=0,location=0,resizable=0,scrollbars=0,";
                str += "status=0,titlebar=no,toolbar=0,left=0,";
                str += "top=0,width=400,height=300";
            
                    myWindow1 = window.open("", "Zagryzka", str);
                    document.Zagryzka.submit();
                        
            }

Суть проблемы: после обработки скриптом полученная HTML страница должна вкладываться в новом окне с именем "Zagryzka", как указанно в target формы. Прекрасно работает в Mozila, Chrom,Opera , но IE пустое окно. Что не так?

  Ответить  
 
 автор: confirm   (26.08.2013 в 10:34)   письмо автору
 
   для: mikado3333   (26.08.2013 в 09:54)
 

В каком именно?

И:
method="post"enctype="multipart/form-data" - гарантированный баг в IE, нет пробела
form name="Zagryzka", window.open("", "Zagryzka", str); - нет фантазии на другие имена? IE может на законных основаниях и закрыть доступ к объекту.
action="../Zagryzka_faula.php" - стоит ли использовать регистр на платформе, где он имеет значение?
<input type="button" onclick= "document.Zagryzka.userfile.click();" value = "ВЫБЕРИТЕ ФАЙЛ" class = 'but_vf'> - это для чего, типа "красивое поле" file сделать?

  Ответить  
 
 автор: mikado3333   (26.08.2013 в 11:50)   письмо автору
 
   для: confirm   (26.08.2013 в 10:34)
 

Поправил первые три Ваших замечания - результат не изменился.

По поводу <input type="button" onclick= "document.Zagryzka.userfile.click();" value = "ВЫБЕРИТЕ ФАЙЛ" class = 'but_vf'> - действительно красивое поле сделать :-).

В итоге без изменения

  Ответить  
 
 автор: mikado3333   (26.08.2013 в 12:13)   письмо автору
 
   для: mikado3333   (26.08.2013 в 11:50)
 

Поэкспериментировал похоже IE не может "переварить" скрипт загрузки.
Сам скрипт

<?
$date 
date("dmY"); /////////////////////////////// ДАТА И ВРЕМЯ
$time date("His");
$number '144';


$max_filesize 104857600// Максимальный размер загружаемого файла в байтах (в данном случае он равен 100 Мб).

$upload_path "../all/files/$number/"// Место, куда будут загружаться файлы (в данном случае это папка 'files').

$filename $_FILES['userfile']['name']; // В переменную $filename заносим точное имя файла (включая расширение).

$nomer_str strripos($filename'.'); //последнее  вхождение точки

$exe substr($filename$nomer_str) ; // получим  расширение



//////////////////////////////////////////////////////////////////////////ОКНО//////////////////////////////////////////////////////////////////////////////////////

                                    // Теперь проверим размер загруженного файла и если он больше максимально допустимого, то прерываем выполнение программы и выдаем сообщение.

    
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)die('Фаил слишком большой.');
                                    
// Проверяем, доступна ли на запись папка, определенная нами под загрузку файлов (папка files). Если вдруг недоступна, то выдаем сообщение, что на папку нужно поставить права доступа 777.

    
if(!is_writable($upload_path)) {mkdir("../all/files/$number/"0777);} ///// Загружаем фаил в указанную папку.



    
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path $filename))///////////////////ОТПРАВКА ФАЙЛА
        
{
/////////////////////////////////////////////////////переминовывание файла//////////////////////////////////////
        
$_1=$upload_path.$filename;
        
$_2=$date.'('.$time.')-'.'file'.$exe;
        
$rename=$upload_path.$_2;
        
rename ("$_1"$rename");
        
/////////////////////////////ФОРМИРОВАНИЕ ТЕКСТА ОКНА.///////////////////////////////////////////////////////////////////////
echo '&nbsp Ваш фаил успешно загружен!'
echo 
'<br> Нажмите кнопку "ССЫЛКА" и текст содержащий <br> ссылку на Ваш файл появится в поле ответ, автоматически.
<br> Если Вы ошиблись с выбором файла просто сотрите ссылку
из поля ответ и повторите процедуру загрузки.  <br> <br>'
,'<span style = "color:red">','&lt;a href="' $rename '">',$filename,'&lt;/a&gt;','</span>';
        }

    else
        {
            echo 
'При загрузке возникли ошибки. Попробуйте ещё раз.';
        }
?>

    <script type="text/javascript">   
        <!-- 
        
                
            function Z() //////// ДОБАВЛЕНИЕ ССЫЛКИ В ПОЛЕ ОТВЕТ 
                {
                    window.opener.document.getElementById("txt").value= window.opener.document.getElementById("txt").value + "<? echo '\n <a href=\"' $rename '\" style = \"color:#00ffff;font-size:0.8em;font-weight:bolder;\" onclick = \"signal = 1;\">',$filename,'</a>';?>";
                    self.close();
                }

            //-->
            </script>

<input type="button" value="ССЫЛКА"  onclick="Z();">


  Ответить  
 
 автор: confirm   (26.08.2013 в 12:29)   письмо автору
 
   для: mikado3333   (26.08.2013 в 12:13)
 

Рекомендация - выбросить. В сети описана загрузка файлов "аля-ajax" использующая фрейм, и это лучше. К тому же, некогда вы сказали, что рассчитываете именно на современные браузеры, а они (IE начиная с версии 10) обеспечивают загрузку файлов объектом XMLHttpRequest(), без всех этих выкрутасов.

  Ответить  
 
 автор: confirm   (26.08.2013 в 12:24)   письмо автору
 
   для: mikado3333   (26.08.2013 в 11:50)
 

Вы не ответили в каком именно IE такое получается. Например, если из под IE10 проверять, то с учетом изменений все будет работать.

А вообще, никогда такого делать не стоит, так необдуманно именовать объекты. Вот просто пример, который часто приводится в сети. Выполните его в IE:
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
</head>
<body>
<div id="main"></div>
<script>
  main = "Message";
  alert(main);
</script>
</body>
</html>
и вы ни за что не получите сообщения, если не переименуете переменную, или не используете директиву var для ее объявления, или не укажите другое id у DIV.

Для того чтобы сделать приличный и одинаковый во всех браузерах input type=file, совсем не нужен еще один input, он по большому счету бесполезен. Способы стилизации его описаны в сети, есть и очень простые.

И последнее - для чего это все, типа "ajax" загрузку файла сделать?

  Ответить  
 
 автор: mikado3333   (26.08.2013 в 12:52)   письмо автору
 
   для: confirm   (26.08.2013 в 12:24)
 

Проверяю в IE8 установленный на Windows7. Не совсем понял ваш вопрос -

И последнее - для чего это все, типа "ajax" загрузку файла сделать?

Если Вы имели ввиду сделать "ajax" загрузку с <frame> ,вместо того что бы "мудрить". То скорее всего так и сделаю. Просто "хотца" докопаться что же не нравится этому IE8.

  Ответить  
 
 автор: confirm   (26.08.2013 в 13:04)   письмо автору
 
   для: mikado3333   (26.08.2013 в 12:52)
 

В вашем случае нет никакой ajax-загрузки файла, и открываемое вами окно, это ответ сервера о результатах загрузки, то есть элемент диалога сервер-клиент. А какой смысл иметь форму отправки в одном окне, а вести диалог в другом? Поэтому лучше IFRAME.

  Ответить  
 
 автор: mikado3333   (26.08.2013 в 13:14)   письмо автору
 
   для: confirm   (26.08.2013 в 13:04)
 

Идея была в создании пред просмотра и только после того как человек убедился что это ТОТ файл давал на него ссылку в ответе.

  Ответить  
 
 автор: confirm   (26.08.2013 в 14:08)   письмо автору
 
   для: mikado3333   (26.08.2013 в 13:14)
 

Лучше в этом случае поступать по другому - для новых браузеров делать и предпросмотр, и даже чашечку кофе предлагать, а для всякой рухляди сообщение - "Увы и ах, но ваш браузер такая рухлядь, что сервер отказывается вам показывать то, что вы пытаетесь всучить ему. Обновите свой браузер по ссылке <a href=...>, или установите любой из альтернативных по ссылкам <a href=...>, <a href=...>, ..., иначе мы вам можем предложить только чай, без лимона."

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

Вот пример Ajax загрузки файла (я его написал не проверяя, если что, то ошибки можно и исправить). Код позволяет производить предпросмотр выбранного файла не за счет сервера, а с помощью возможностей предоставляемых HTML5.
<!DOCTYPE HTML>
<html>
<head>
<style>#hldr img{width:320px;height:auto}</style>
<script>
function sendForm(f) {
      var fd = !!window.FormData, fl = false;
      if(fd) {  
          var dt = new FormData();
          for(var i=0, k=f.length; i<k; i++) { //обход элементов формы и добавление их в FormData
             if(f[i].type=='file' && f[i].value) {dt.append(f[i].name, f[i].files[0]); fl = true;} //добавление файла
             else if(f[i].type!='file' && f[i].name) dt.append(f[i].name, f[i].value); //добавление остальных полей формы 
          }
       } else {
          //с отправкой файла, но минуя Ajax
       }
       
       var xhr = new XMLHttpRequest();
       xhr.open('POST', 'post.php', true);
       xrn.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
       if(fd) { //если поддерживается Ajax загрузка и предпросмотр
          xhr.onload = function() {
             document.getElementById('prgs').value = 100; document.getElementById('prgm').innerHTML = '100% загружено'; //прогресс загрузки файла
             if (xhr.status == 200) requestSend(xhr.responseText); //отправка результата в обработчик
          } 
       } else { //иначе отправка формы без файла
          xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
          xhr.onreadystatechange = function() {
             try {
                if(xhr.readyState == 4) {
                   if (xhr.status == 200) requestSend(xhr.responseText); //отправка результата в обработчик
                }
             } catch(e) {}
          }
       } 
       
       if(fl) { //отображение прогресса загрузки файла
          document.getElementById('prgs').value = 0; document.getElementById('prgm').innerHTML = '0% загружено';
          xhr.upload.onprogress = function(event) {
             if (event.lengthComputable) {
                var v = Math.round(event.loaded/event.total*100);
                document.getElementById('prgs').value = v; document.getElementById('prgm').innerHTML = v+'% загружено';
             }
          }
       }
       xhr.send(dt);
       return false;
}

function preview(f) { //предпросмотр загружаемого файла, имеется ввиду изображение
   if(!!window.FileReader) {
      var reader = new FileReader(), hld = document.getElementById('hldr');
      hld.innerHTML = '';
      reader.onload = function(event) {
         var im = new Image();
         im.src = event.target.result;
         hld.appendChild(im);
      }
      reader.readAsDataURL(f)
   } 
}   
</script>    
</head>
<body >
   <form onsubmit="sendForm(this.elements)">
      <input type="file" onchange="preview(this.files[0])" />
      <input type="submit" value="Send" />
   </form>
   <progress id="prgs" max="100" value="0"></progress> <span id="prgm"></span>
   <div id="hldr"></div>
</body>
</html>

Новая реализация XMLHttpRequest позволяет производить и мульти загрузку файлов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования