44

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

<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, я получаю эту странную ошибку. Почему я не получил это в первый раз?

Пришлось посмотреть @ этот пост ->"Access is denied" when script tries to access iframe in IE8, но это не помогло.

ответ

97

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

Похожий вопрос: http://www.webdeveloper.com/forum/showthread.php?t=181272

+3

Должны подтвердить этот ответ. Я отчаянно искал проблему с моей загрузкой формы, где на самом деле я использовал пользовательский ввод файлов в IE, и это вызывало проблему с доступом. Great insight, thx –

+0

Что мне не хватает? Эта скрипка, кажется, подтверждает этот ответ неправильно; используя Ender/Bean вместо jQuery У меня есть IE9, открывающий сборщик файлов и отправку формы в сгенерированный iframe через JS, и он, похоже, работает: http://jsfiddle.net/NkycS/27/ – RwwL

+5

Ага, я получил it - у моего ввода файла не было атрибута имени. Как только я добавлю один, я получаю ошибку отказа в доступе: http://jsfiddle.net/NkycS/32/ – RwwL

0

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

+0

Не работал. – Oxon

13

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

  1. Вы не можете прочитать «значение» элемента, поскольку оно хранит имя файла.
  2. Вы не можете запустить меню выбора файлов через JS.
  3. Вы не можете отправить сообщение об отправке файла с помощью JS.

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

Ваш лучший выбор - решение на основе Flash или, возможно, новый элемент управления HTML5.

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

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

Проверить «Содержимое сообщества» весь путь на дно выше страницы.

Смежные вопросы