ошибка получения доступа запрещена в IE8 - PullRequest
45 голосов
/ 14 октября 2010

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

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

Ответы [ 3 ]

97 голосов
/ 02 декабря 2010

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

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

13 голосов
/ 16 июня 2011

Традиционно доступ 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

Установите флажок "Содержимое сообщества" полностью внизу.на приведенной выше странице.

0 голосов
/ 15 октября 2010

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

...