Правильное кодирование href для window.open () в JavaScript - PullRequest
1 голос
/ 09 марта 2010

Какая правильная кросс-браузерная кодировка для href при использовании window.open() в 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 открывает: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1©=1

FireFox открывает: 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 открывает: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

FireFox открывает: http://127.0.0.1:8000/etf/admin/escola/t34atividade/?pop=1&copy=1

Ответы [ 3 ]

2 голосов
/ 09 марта 2010

Используйте функцию Javascript «encodeURIComponent» для каждого фрагмента URI, который является не частью синтаксиса URI (то есть косые черты разделителя, знак вопроса для строки запроса, амперсанды разделителя параметров и т. Д.) .

Кодировка URI не такая же, как экранирование HTML. Например, вы не можете использовать амперсанд в URL-адресе как &.

1 голос
/ 09 марта 2010

IE8, кажется, пытается принудить аргумент строки запроса & copy = 1 к объекту & copy; , который является символом авторского права (& copy;). Это на самом деле смешно. Точно так же, как Microsoft, чтобы обременять пользователя «помощью».

В кодировке указывается правильно. Также будьте внимательны: у вас нет минификатора кода, который удаляет все в строке после пары двойных слешей (//); Я видел эти страницы крушения раньше.

0 голосов
/ 09 марта 2010

Самым простым решением, которое я нашел, было прекращение использования copy в качестве параметра GET. Проблема в том, что &copy на самом деле является сущностью HTML для символа авторского права. IE применяет замену объекта, преобразуя его в символ, даже если он находится в коде JavaScript. По-видимому, Firefox не выполняет замену сущностей. Согласно комментарию в этом блоге, то, что делает IE, может быть правильным, но чтобы избежать всего беспорядка, я просто переименовал свой параметр в clone.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...