Закодированный символ прерывает привязку данных Knockout js на IE8

У меня очень странная проблема с IE8 (и только с версией IE ниже 8). Проблема в привязке атрибута, если я добавлю закодированную строку электронной почты (с%26, %40 и т. Д.), Страница не будет отображать привязки данных в текстовом поле ('firstlast@domain.com' в случае ниже), вместо этого он будет отображаться как "mailto:first%26last%40domain.com".

<a data-bind="    visible: Email.length > 0, text: 'firstlast@domain.com', attr:{ href: 'mailto:' +  'first%26last%40domain.com' }"></a>

Странно то, что он прекрасно воспроизводится, если я использую некодированную строку

<a data-bind="    visible: Email.length > 0, text: 'firstlast@domain.com', attr:{ href: 'mailto:' +  'first&last@domain.com' }"></a>

Оба способа работают правильно в Firefox, Chrome и более поздних версиях IE.

1 ответ

Решение

Я отладил его и обнаружил, что Knockout js использует метод DOM setAttribute() для установки href. И, согласно документации W3School, setAttribute() поддерживает браузер IE9 и новее, поэтому я думаю, что именно это и приводит к странному результату.

Я также искал вокруг setAttribute(), другие люди также сталкивались с подобной проблемой, см. Ссылку ниже:

https://social.msdn.microsoft.com/Forums/ie/en-US/aa6bf9a5-0c0b-4a02-a115-c5b85783ca8c/javascript-modifying-href-changes-link-text-as-well-for-mailto-protocol?forum=iewebdevelopment