44

Ho un modulo HTML (upload.htm) con un controllo di caricamento di file HTML al suo interno.accesso negato errore su IE8

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

C'è anche un metodo JavaScript nella pagina di cui sopra, che va come:

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

Io chiamo questo all'interno di una pagina (uploadpage.htm) all'interno di un iframe:

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

Provo a eseguire la dichiarazione riportata di seguito dalla pagina di caricamento .01 Pagina:

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

ottengo un errore che dice Accesso negato, e il mio debugger si ferma alla prima funzione JavaScript ho mostrato. Entrambi i file si trovano nella stessa posizione nel progetto web. Hanno lo stesso nome di dominio anche. Perché ottengo questo errore allora?

Naturalmente, in precedenza, potevo pubblicare la pagina: quando non ho impostato l'attributo name per il controllo di caricamento HTML. Ma dopo aver impostato l'attributo name nel markup HTML, ottengo questo strano errore. Perché non l'ho preso la prima volta?

Aveva un aspetto @ questo post ->"Access is denied" when script tries to access iframe in IE8, ma non ha aiutato.

risposta

97

IE non consente la manipolazione dell'elemento di input type = "file" da javascript a causa di motivi di sicurezza. L'impostazione del nome file o il richiamo di un evento click per mostrare la finestra di dialogo del browser comporterà un errore "Accesso negato" sul modulo di invio - Internet Explorer è intelligente nel ricordare quali metodi sono stati richiamati.

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

+3

Devo riaffermare questa risposta. Stavo cercando freneticamente un problema con il caricamento del mio modulo, mentre in realtà stavo usando l'input di file personalizzato in IE e questo stava causando il problema dell'accesso negato. Grande intuizione, grazie –

+0

Cosa mi manca? Questo violino sembra provare questa risposta in modo sbagliato; utilizzando Ender/Bean invece di jQuery IE9 apre il selettore di file e invia il modulo a un iframe generato tutto tramite JS e sembra funzionare: http://jsfiddle.net/NkycS/27/ – RwwL

+5

Aha, ho ottenuto it - il mio input di file non aveva un attributo name su di esso. Non appena ne aggiungo uno, ottengo l'errore di accesso negato: http://jsfiddle.net/NkycS/32/ – RwwL

0

In entrambi i file HTML, uno che è nel frame e un altro che contiene il frame, prova ad aggiungere document.domain='example.com' dove "esempio.com" è il tuo nome di dominio.

+0

Non mi ha lavorato. – Oxon

13

Tradizionalmente, l'accesso JavaScript per HTML input type="file" è fortemente limitato per problemi di sicurezza. AFAIK, Non è possibile eseguire quanto segue con JS su un elemento uploader file:

  1. Non è possibile leggere il "valore" dell'elemento in quanto contiene il nome file.
  2. Non è possibile attivare il menu di selezione file tramite JS.
  3. Non è possibile eseguire l'invio del controllo del file uploader tramite JS.

Tutto questo è in atto per prevenire attacchi dannosi come il furto dei file in background tramite JS. Non ho giocato con un elemento input type="file" in un istante, ma la mia migliore ipotesi è che colpirà problemi simili (se non tutti) anche in altri browser.

La soluzione migliore è una soluzione basata su Flash o forse un nuovo controllo HTML5.

Inoltre, qui è un riferimento ufficiale sul tema:

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

Check "Contenuto della community" tutta la strada sulla parte inferiore della pagina di cui sopra.