Получить доступ к ошибке IE8

У меня есть HTML-форма (upload.htm) с элементом управления загрузкой файла HTML внутри нее.

<form id="frmupload" name="upload" enctype="multipart/form-data" action="uploadhandler.ashx" method="post">
    <input id="uploader" name="uploadctrl" type="file"/>
</form>

На приведенной выше странице также есть один метод JavaScript:

function performUpload(){
    document.getElementById('frmupload').submit();
}

Я вызываю это внутри страницы (uploadpage.htm) из iframe:

<iframe id="docframe" src="upload.htm" style="display:none"></iframe>

Я пытаюсь выполнить оператор, показанный ниже, на странице uploadpage.htm:

var i = document.getElementById('docframe');
i.contentWindow.performUpload();

Я получаю сообщение об ошибке "Доступ запрещен", и мой отладчик останавливается при первой функции JavaScript, которую я показал. Оба файла находятся в одном месте в веб-проекте. Они имеют одинаковое доменное имя. Почему я получаю эту ошибку?

Конечно, раньше я мог опубликовать страницу: когда я не установил атрибут name для элемента управления загрузкой HTML. Но после того, как я установил атрибут name в разметке HTML, я получаю эту странную ошибку. Почему я не получил это в первый раз?

Посмотрел @этот пост → "Доступ запрещен" когда script пытается получить доступ к iframe в IE8, но это не помогло.

Ответ 1

IE не позволяет манипулировать элементом ввода type="file" из javascript из-за соображений безопасности. Установка имени файла или вызов события клика для отображения диалогового окна браузера приведет к ошибке "Отказано в доступе" в форме submit - Internet Explorer умеет запоминать, какие методы были вызваны.

Аналогичная проблема: http://www.webdeveloper.com/forum/showthread.php?t=181272

Ответ 2

Традиционно доступ JavaScript к HTML input type="file" строго ограничен для проблем безопасности. AFAIK, вы не можете сделать следующее с JS в элементе uploader файла:

  • Вы не можете прочитать "значение" элемента, поскольку оно содержит имя файла.
  • Вы не можете запустить меню выбора файлов через JS.
  • Вы не можете запустить отправку элемента управления загрузчиком файлов через JS.

Все это позволяет предотвратить появление вредоносных атак, например, кражу ваших файлов в фоновом режиме через JS. Я не играл с элементом input type="file", но, насколько я понимаю, вы столкнетесь с подобными проблемами (если не все) в других браузерах.

Лучше всего использовать Flash-решение или, возможно, новый HTML5-контроль.

Кроме того, здесь приведена официальная ссылка на тему:

http://msdn.microsoft.com/en-us/library/ms535263(v=vs.85).aspx

Проверьте "Содержимое Сообщества" полностью в нижней части вышеприведенной страницы.

Ответ 3

В обоих файлах HTML - том, который находится в кадре, а другой, который содержит фрейм, - добавьте document.domain='example.com', где "example.com" - ваше доменное имя.