Я пытаюсь установить href элемента с помощью jQuery. Когда я устанавливаю IDN в Firefox 6, href закодирован в URL-адресе. Одним из примеров является IDN http://r%C3%A4ksm%C3%B6rg%C3%A5s.se, преобразованный в http://r%C3%A4ksm%C3%B6rg%C3%A5s.se. Когда я делаю то же самое в других браузерах (IE8, Chrome 13, Safari 5.1), IDN не кодируется.
Причина, по которой я пытаюсь это сделать, заключается в том, что я позволяю пользователю изменять hrefs, а затем загружать подмножество содержимого страницы с помощью ajax на веб-сервер. Затем у меня возникают проблемы, так как ссылка скрыта глубоко в строке html; и я бы предпочел не выкапывать все элементы в строке html.
Есть ли способ отключить кодировку hrefs при настройке в Firefox? Или у вас есть другие способы решить проблему?
(Я заметил, что если href является действительным IDN punycode, т.е. http://www.xn--rksmrgs-5wao1o.se, браузеры хороши и денди. Но тогда мне нужно сделать кодировку punycode в js, чего я предпочитаю не делать; может быть одна или несколько ошибок, и нет похоже, это официальный выпуск кодировщика/декодера.)
На следующей html-странице отображается моя проблема. Если вы введете международное доменное имя (скопируйте и вставьте «http://www.räksmörgås.se»), #linkHtml получит весь элемент a, включая искаженный href при использовании Firefox и правильный href при использовании любого другого браузера. .
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script>
$(document).ready(function(){
$("#linkText").focus();
$("#linkText").keyup(function() {
var href = $(this).val();
$("#link").attr('href', href);
$("#linkHtml").text($("#link").parent().html());
});
});
</script>
</head>
<body>
<div><input id="linkText" type=text /></div>
<div><a id="link" href="#">link</a></div>
<span id="linkHtml"></span>
</body>
</html>