2010-03-09 1 views
1

Quel est le bon codage multi-navigateur pour le href lors de l'utilisation de window.open() en JavaScript? D'abord, j'utilisaisCodage correct de href pour window.open() en JavaScript

var href = "http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1"; 
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); 

IE8 ouvre: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1©=1

FireFox ouvre: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

var href = "http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1"; 
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); 

IE8 ouvre: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

FireFox ouvre: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

Répondre

0

La solution la plus simple que j'ai trouvée était d'arrêter d'utiliser copy en tant que paramètre GET. Le problème est que &copy est en fait une entité HTML pour le symbole de copyright. IE applique un remplacement d'entité le convertissant en symbole même s'il est en code JavaScript. Apparemment, Firefox n'effectue pas le remplacement d'entité. Selon un commentaire dans ce blog ce que fait IE est correct, mais pour éviter tout le gâchis, je viens de renommer mon paramètre à clone.

http://nedbatchelder.com/blog/200812/accidental_html_entities_in_urls.html

2

Utilisez le Javascript Fonction "encodeURIComponent" pour chaque partie de l'URI qui est et non partie de la syntaxe URI (c'est-à-dire, les barres obliques de séparation, le point d'interrogation de la chaîne de requête, les esperluettes séparatrices de paramètres, etc.).

Le codage URI est et non de même que l'échappement HTML. Par exemple, vous n'échappez pas une perluète dans une URL comme &.

+0

+1 pour la bonne réponse. J'ai ajouté quelques informations d'arrière-plan ci-dessous. Je l'aurais ajouté dans un commentaire ici, mais je ne pouvais pas obtenir le bon comportement des entités. – Robusto

+1

Je ne comprends pas. Pouvez vous donner un exemple? Quand je passe la chaîne "copy" à encodeURIComponent() il ne fait rien et quand je passe la chaîne "&" il la code comme% 26 dans la nouvelle URL qui n'est pas ce que je veux non plus. Je veux avoir deux paramètres dans ma copie GET et pop qui sont tous deux mis à 1. – user27478

1

IE8 semble essayer de forcer l'argument de chaîne de requête & copie = 1 à la copie de l'entité &;, qui est le symbole du droit d'auteur (©). C'est vraiment drôle. Tout comme Microsoft pour encombrer l'utilisateur avec "aide".

Pointy a raison concernant l'encodage. Veillez également à ce que vous ne disposiez pas d'un minifacteur de code qui supprime tout sur une ligne après une double barre oblique (//); J'ai déjà vu ces pages d'épaves.

Questions connexes