2010-03-19 16 views
1

J'ai un problème avec IE8 et l'ouverture d'une nouvelle fenêtre avec javascript et l'envoi de paramètres avec des caractères spéciaux.Problème dans IE8 avec GET Paramètres dans l'ouverture d'une nouvelle fenêtre avec javascript

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600);" class="print">Seite drucken</a> 

Le problème est la lettre «ß» (pointu S). Comme vous pouvez le voir, la chaîne ci-dessus est encodée en raison de l'anti XSS. Ce lien fonctionne dans FF et IE6 mais IE8 transmet le paramètre URL comme caractère avec le code 65 *** (ne connaît pas la valeur exaxt). Dans la fenêtre d'ouverture, vous ne verrez qu'un carré (car le caractère 65000+ n'est pas imprimable).

J'ai aussi essayé d'utiliser l'URL d'encodage au lieu de codage HTML

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question%3DWie hei%C3%9Ft Ihr Lieblingsrestaurant','PRINT',800,600);" class="print">Seite drucken</a> 

Si je clique sur ce lien FF ou IE6 il fonctionne comme prévu, mais IE8 ne parviendra pas à transmettre le « ß » au serveur et par conséquent, il sera également récupérer dans le mauvais sens. Si je colle cette URL à IE8 cela fonctionnera aussi, mais pas si la fenêtre est ouverte par javascript.

La fonction Javascript Owin est défini comme suit

function oWin(url,title,sizeH,sizeV) { 
winHandle = top.open(url,title,'toolbar=no,directories=no,status=yes,scrollbars=yes,menubar=no,resizable=no,width='+sizeH+',height='+sizeV); 
if(navigator.appVersion.indexOf("MSIE 3",0)==-1) id = setTimeout('winHandle.focus()',1000); 
} 

Si quelqu'un a une idée où chercher la raison s'il vous plaît répondre à cette question.

Merci AMFA

+0

Qu'est-ce que vous utilisez dans le back-end? Êtes-vous sûr que 'ß' n'est pas du tout transmis au serveur? A quoi ressemble la chaîne transmise lorsqu'elle est transmise dans IE8? –

+0

J'ai compris que le lien fonctionne si je n'utilise pas javascript pour ouvrir une nouvelle fenêtre. Je ne sais pas pourquoi je n'ai pas essayé cela avant;) Mais je me demande toujours ce problème de javascript. – amfa

+0

@ Pekka le backend se compose d'un Oracle IAS et nous utilisons un système CMS basé sur Java. Pendant que je débogue ceci je peux voir que la demande se compose d'un caractère avec le code élevé mentionné ci-dessus. – amfa

Répondre

1

Tous les navigateurs ne href attribut encode de la même manière - cela pourrait être votre problème. Je pense que vous trouverez que si vous déplacez le code à l'attribut onclick, il sera géré différemment, et de manière plus cohérente entre les navigateurs. L'ajout d'événements onclick de cette manière n'est cependant pas forcément une bonne conception. Il est préférable d'ajouter des gestionnaires en javascript plutôt que dans l'attribut lui-même, mais cela vaut la peine d'essayer au moins.

<a href="javascript:oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600);" 
    class="print" 
    onclick="oWin('/html/de/4664286/printregistrationcontent.html?12-security question&#61;Wie hei&#223;t Ihr Lieblingsrestaurant','PRINT',800,600); return false;" 
> 
    Seite drucken 
</a> 

... assurez-vous return false dans le gestionnaire onclick pour empêcher le lien href suivi.

+0

Merci! Cela marche! :) Mais seulement si je n'utilise pas d'entités HTML mais la version d'encodage de l'URL. Si j'utilise des entités HTML j'ai la lettre ß dans le javascript et cela ne sera pas transmis au serveur par IE8 – amfa

+0

Oui, vous ne pourrez pas utiliser les caractères spéciaux HTML tels que & etc. Si vous avez besoin d'encoder des caractères, vous devez chercher dans l'encodage de l'URL ou dans les séquences d'échappement des chaînes de caractères javascript * (par exemple ''\ x12'' pour les caractères hexadécimaux codés sur un octet et '" \ u1234 "' pour unicode (multibyte) caractères hexadécimaux codés, etc) – Graza