web-dev-qa-db-fra.com

obtenir l'accès est refusé erreur sur IE8

J'ai un formulaire HTML ( upload.htm ) avec un contrôle de téléchargement de fichiers HTML à l'intérieur.

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

Il y a aussi une méthode JavaScript dans la page ci-dessus qui ressemble à ceci:

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

J'appelle cela à l'intérieur d'une page ( uploadpage.htm ) à partir d'un iframe:

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

J'essaie d'exécuter la déclaration ci-dessous à partir de la page uploadpage.htm :

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

Je reçois une erreur disant L'accès est refusé, et mon débogueur s'arrête à la première fonction JavaScript que j'ai montrée. Les deux fichiers se trouvent au même emplacement dans le projet Web. Ils ont aussi le même nom de domaine. Pourquoi est-ce que j'obtiens alors cette erreur?

Bien sûr, plus tôt, je pouvais poster la page: lorsque je n'avais pas défini l'attribut name pour le contrôle de téléchargement HTML. Mais après avoir défini l'attribut name dans le balisage HTML, j'obtiens cette erreur étrange. Pourquoi n'ai-je pas eu ça la première fois?

J'ai regardé ce post -> "L'accès est refusé" lorsque le script essaie d'accéder à iframe dans IE8 , mais cela n'a pas aidé.

45
deostroll

IE ne permet pas la manipulation de l'élément d'entrée type = "file" à partir de javascript pour des raisons de sécurité. La définition du nom de fichier ou l'appel d'un événement de clic pour afficher la boîte de dialogue du navigateur entraînera une erreur "Accès refusé" sur le formulaire soumis - Internet Explorer est intelligent pour se souvenir des méthodes qui ont été invoquées.

Problème similaire: http://www.webdeveloper.com/forum/showthread.php?t=181272

97
Dunc

Traditionnellement, l'accès JavaScript à HTML input type="file" est sévèrement limité pour des raisons de sécurité. AFAIK, vous ne pouvez pas faire ce qui suit avec JS sur un élément de téléchargement de fichier:

  1. Vous ne pouvez pas lire la "valeur" de l'élément car il contient le nom de fichier.
  2. Vous ne pouvez pas lancer le menu de sélection de fichiers via JS.
  3. Vous ne pouvez pas déclencher la soumission du contrôle de téléchargement de fichier via JS.

Tout cela est en place pour empêcher les attaques malveillantes comme le vol de vos fichiers en arrière-plan via JS. Je n'ai pas joué avec un input type="file" élément dans un certain temps, mais ma meilleure supposition est que vous rencontrerez également des problèmes similaires (sinon tous) dans d'autres navigateurs.

Votre meilleur pari est une solution basée sur Flash ou peut-être un nouveau contrôle HTML5.

Voici également une référence officielle sur le sujet:

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

Cochez "Contenu de la communauté" tout en bas de la page ci-dessus.

13
Rajat

Dans les deux fichiers HTML - celui qui est dans le cadre et un autre qui contient le cadre - essayez d'ajouter document.domain='example.com' où 'example.com' est votre nom de domaine.

0
Gaurav Saxena