44

Tengo un formulario HTML (upload.htm) con un control de carga de archivos HTML dentro de él.obteniendo acceso denegado el error en IE8

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

También hay un método JavaScript de la página anterior que dice así:

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

Yo llamo a esto dentro de una página (uploadpage.htm) desde dentro de una iframe:

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

trato de ejecutar la instrucción se muestra a continuación de la uploadpage.htm página:

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

me sale un error que dice Acceso denegado, y mi depurador se detiene en la primera función de JavaScript que he mostrado. Ambos archivos están en la misma ubicación en el proyecto web. Ellos tienen el mismo nombre de dominio también. ¿Por qué obtengo este error entonces?

Por supuesto, antes, podía publicar la página: cuando no establecí el atributo name para el control de carga de HTML. Pero después de establecer el atributo de nombre en el marcado HTML, obtengo este extraño error. ¿Por qué no lo conseguí la primera vez?

Echa un vistazo @ este post ->"Access is denied" when script tries to access iframe in IE8, pero no ayudó.

Respuesta

97

IE no permite la manipulación del elemento de entrada type = "file" de javascript debido a razones de seguridad. Establecer el nombre del archivo o invocar un evento de clic para mostrar el diálogo del navegador dará como resultado un error de "Acceso denegado" en el envío del formulario: Internet Explorer es inteligente para recordar qué métodos se han invocado.

problema similar: http://www.webdeveloper.com/forum/showthread.php?t=181272

+3

Tengo que reafirmar esta respuesta. Estaba buscando frenéticamente un problema con la carga de mi formulario donde, de hecho, estaba usando la entrada de archivo personalizado en IE y esto estaba causando el problema Acceso denegado. Gran idea, thx –

+0

¿Qué me estoy perdiendo? Este violín parece probar que esta respuesta es incorrecta; usando Ender/Bean en lugar de jQuery, tengo IE9 abriendo el selector de archivos y enviando el formulario a un iframe generado todo a través de JS y parece funcionar: http://jsfiddle.net/NkycS/27/ – RwwL

+5

Aha, conseguí it - mi entrada de archivo no tenía un atributo de nombre. Tan pronto como agregue uno, obtengo el error de acceso denegado: http://jsfiddle.net/NkycS/32/ – RwwL

0

En ambos archivos HTML, el que está en el marco y el otro que contiene el marco, intente agregar document.domain='example.com' donde 'example.com' es su nombre de dominio.

+0

No me funcionó. – Oxon

13

Tradicionalmente, el acceso de JavaScript al HTML input type="file" está severamente limitada por motivos de seguridad. AFAIK, No puede hacer lo siguiente con JS en un elemento de carga de archivos:

  1. No puede leer el "valor" del elemento ya que contiene el nombre del archivo.
  2. No puede iniciar el menú de selección de archivos a través de JS.
  3. No puede iniciar el envío del control del cargador de archivos a través de JS.

Todo esto está en su lugar para evitar ataques maliciosos como robar sus archivos en segundo plano a través de JS. No he jugado con un elemento input type="file" en un tiempo, pero mi mejor opción es que se toparán con problemas similares (si no todos) en otros navegadores también.

Su mejor opción es una solución basada en Flash o tal vez un nuevo control HTML5.

Además, aquí es una referencia oficial sobre el tema:

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

Comprobar "Contenido de la comunidad" todo el camino en la parte inferior de la página anterior.

Cuestiones relacionadas