Если вы document.write
обращаетесь к документу HTML, любой выводимый текст должен быть экранирован HTML:
function encodeHTML(s) { // for text content and attribute values with " delimiter
return s.split('&').join('&').split('<').join('<').split('"').join('"');
}
somedocument.write(encodeHTML(link.href));
Однако, вероятно, было бы проще использовать методы DOM:
somedocument.write('<p id="out">x</p>');
somedocument.getElementById('out').firstChild.data= link.href;
В любом случае вам не нужно беспокоиться о ссылках на Unicode или &#...;
. Строки JavaScript изначально являются Unicode. И вам нужно будет подумать об использовании encodeURI
, только если вы создаете URI из какого-либо сценария (например, var uri= 'javascript:'+encodeURI(somejscode)
), которого у вас нет, у вас уже есть URI в ссылке. (encodeURIComponent
также будет работать, но для этого случая, когда у вас есть целый URI, а не только компонент, encodeURI
даст более простые результаты.)
PS. Вы не хотите использовать оператор with
, если можете помочь. (Или javascript:
URL, если на то пошло!)
ETA. Если вам действительно нужен исходный код со всеми нетронутыми ошибками, вам придется сделать то же, что и веб-сниффер, и снова извлечь страницу из сети. Вы можете сделать это для текущей страницы, если она является результатом метода GET с использованием XMLHttpRequest. Например:
<code>var d= window.open().document, x= new XMLHttpRequest();
d.write('<body><pre>x
');
d.close ();
x.onreadystatechange = function () {
если (this.readyState === 4)
d.body.firstChild.firstChild.data = this.responseText;
}
x.open ('GET', location.href);
x.send (нуль);
или упакованные в букмарклет:
javascript:(function()%7Bvar%20d=window.open().document,x=new%20XMLHttpRequest();d.write('%3Cbody%3E%3Cpre%3Ex%3C/pre%3E');d.close();x.onreadystatechange=function()%7Bif(this.readyState===4)d.body.firstChild.firstChild.data=this.responseText%7D;x.open('GET',location.href);x.send(null)%7D)()