22 votes

Schéma de données URI et erreurs Internet Explorer 9

Je rencontre un problème en utilisant le schéma d'URL de données RFC 2397 avec les versions d'IE 6 à 9. Mon code d'exemple ci-dessous fonctionne sans problème lorsque j'utilise les versions actuelles de Safari, FF, Opera et Chrome.

data:text/html;base64,PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9aHR0cDovL2dvb2dsZS5jb20vIj4g

ou

data:text/html,%3Cmeta%20http-equiv%3D%22refresh%22%20content%3D%220%3Burl%3Dhttp%3A//google.com/%22%3E%20

Si le code ci-dessus est collé dans presque tous les navigateurs à l'exception d'IE, il naviguera vers google.com. Lorsque vous essayez avec IE, cela échoue avec l'erreur suivante.

La page web ne peut pas être affichée

Cause la plus probable:

  • Certains contenus ou fichiers sur cette page web nécessitent un programme que vous n'avez pas installé.

Que pouvez-vous essayer:

Recherchez en ligne un programme que vous pouvez utiliser pour afficher ce contenu web.

Retapez l'adresse.

Lors de l'inspection de la source de la page d'erreur IE générée, il existe un lien qui fait référence aux associations de fichiers et aux protocoles.

Type de protocole:

Description: Inconnu

Windows ne reconnaît pas ce protocole.

Je réalise que l'utilisation du protocole de données n'est probablement pas la façon la plus directe ou dans la plupart des cas la meilleure option, mais je dois l'utiliser pour ce projet particulier.

J'ai cherché partout une solution et j'ai essayé de nombreux exemples avec IE en espérant que c'était ma syntaxe, mais je n'ai pas encore trouvé de solution.

0voto

Chris Points 846

J'ai trouvé cette solution lorsque je cherchais un moyen de détecter la prise en charge des URI de données pour les fichiers (PDF dans mon cas). L'approche Modernizr de vérification de la prise en charge des images n'était pas suffisante car Internet Explorer 11 et Edge 25 prennent en charge cela mais ne prennent pas en charge les types de fichiers tels que application/pdf. L'approche de Snekse en vérifiant l'attribut de téléchargement a fonctionné sur IE mais pas sur Edge. Finalement, j'ai écrit mon propre script de détection des fonctionnalités en utilisant un appel AJAX pour tenter d'ouvrir une URI de données et vérifier les erreurs. Voici le script que j'ai utilisé (testé dans IE 11, Edge 25, Firefox 46 et Chrome 49) :

checkDataURISupport(function (checkResult) {
    if (checkResult) {
        alert('Les fichiers dans les URI de données sont pris en charge.');
    } else {
        alert('Les fichiers dans les URI de données NE sont PAS pris en charge.');
    }
})

function checkDataURISupport(callback) {
    try {
        var request = new XMLHttpRequest();
        request.onload = function reqListener() {
            callback(true);
        };
        request.onerror = function reqListener() {
            callback(false);
        };
        request.open('GET', 'data:application/pdf;base64,cw==');
        request.send();
    } catch (ex) {
        callback(false);
    }
}

Mise à jour

J'ai réalisé que tout code testant la prise en charge des URI de données est également un test pour la prise en charge de l'ouverture d'une URI de données dans une nouvelle fenêtre. Ainsi, la solution mentionnée dans cette réponse sur SO et liée dans la mise à jour de la réponse de Snekse est techniquement supérieure et je recommanderais de l'utiliser à la place du code ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X