2010-10-19 3 views
1

Voici un code (en utilisant jquery) que j'utilise pour télécharger un fichier html à partir duquel j'extrais une table et son contenu.IE6: Télécharger le html sans exécuter le javascript contenu, en ISO-8859-1 jeu de caractères

var url = $('#url').val(); // url to access 

if ($.browser.msie && $.browser.version.substr(0,1)<7) { 
var frame = $('<iframe/>').css('display', 'none').attr('src', url); 
frame.appendTo('body') 
     .load(function() { 
      var data = frame.contents()[0].firstChild.innerHTML; 
      frame.remove; // kill the frame 
      extractReport(data); // extract the data table 
     }); // load 
} 
else { 
    $.ajaxSetup({ 
     'beforeSend' : function(xhr) { 
      xhr.overrideMimeType('text/html; charset=ISO-8859-1'); 
      } 
     }); // ajaxSetup 
    $.ajax(
     { 
     async:false, 
     url:url, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 
      alert(textStatus); 
     }, 
     success: 
       function(data, textStatus, XMLHttpRequest) { 
        extractReport(data); 
        } 
     }); // ajax 
} //else 

Mon problème est que lorsque j'utilise un objet XMLHttpRequest actif-X dans IE6, le responseText contient des déchets pour les caractères français. J'ai réussi à contourner cela avec un iframe (ie6 ne supporte pas overrideMimeType que j'utilise pour Firefox). Mais maintenant le javascript contenu dans le cadre html est exécuté. Existe-t-il un moyen pour IE6 de télécharger mon fichier html dans le bon jeu de caractères sans exécuter le javascript?

Remarque: Je ne suis pas autorisé à modifier la configuration Apache pour forcer un jeu de caractères ISO-8859-1.

Mon idée: Le html peut-il être téléchargé en texte brut avec un ActiveX? Le seul que je connaisse est ActiveXObject ("Msxml2.XMLHTTP.6.0") et il échoue.

Répondre

2

Le html peut-il être téléchargé en texte brut avec un ActiveX? Le seul que je connaisse est ActiveXObject ("Msxml2.XMLHTTP.6.0") et il échoue.

Non. En effet, IE ne supporte pas la méthode de XMLHttpRequest Level 2 overrideMimeType dans une version à ce jour, que le natif JScript (IE7 +) ou l'ancienne école mise en œuvre ActiveX est utilisé.

overrideMimeType est vraiment la seule façon d'obtenir XMLHttpRequest pour recevoir le contenu du texte dans un autre jeu de caractères à celui qu'il est marqué comme (en-tête UTF-8, si aucune Content-Type charset est spécifié. Un <meta> charset -set ne sert à rien parce que un analyseur HTML lirait cela et XMLHttpRequest n'est pas un analyseur HTML). Il n'y a aucun moyen de récupérer le binaire brut en utilisant XMLHttpRequest.

[méthode iframe] sans exécuter le javascript contenu

Eh bien, en quelque sorte. Il y a l'attribut IE6 + -spécifique et généralement-assez discutable security, qui modifie la zone du document enfant. Ce habituellement a pour effet d'éteindre JavaScript, entre autres effets secondaires, mais ce qui se passe est affecté par les paramètres de la zone Sites à accès restreint IE de l'utilisateur, donc ce n'est pas vraiment fiable.

var frame = $('<iframe security="restricted"/>').css('display', 'none').attr('src', url); 

(et oui, vous ne devez le mettre dans les balises plutôt que de le mettre dans une propriété DOM en utilisant attr ou jQuery 1.4 attr raccourcis de création, ce qui serait habituellement préférable.)

J'utiliser ceci seulement en dernier recours. Je pense que ça va vous causer beaucoup de problèmes.

Je ne suis pas autorisé à modifier la configuration Apache pour forcer un jeu de caractères ISO-8859-1.

Eh bien, ça craint. Êtes-vous autorisé à changer la page cible de sorte que est UTF-8? Les charsets non-UTF-8 sont donc le dernier siècle!

si (.browser.msie $ & & .browser de $.version.substr (0,1) < 7)

Ne pas utiliser le reniflage de navigateur. La capacité que vous voulez renifler est overrideMimeType, vérifiez donc cela:

if ('XMLHttpRequest' in window && 'overrideMimeType' in new XMLHttpRequest()) { 
    // xmlhttp branch 
} else if { 
    // nasty iframe branch 
} 
+0

Bon !!