Получить доступ к ошибке 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" - ваше доменное имя.