Скопировать javascript URL «как есть» по ссылке на веб-странице ?: - PullRequest
0 голосов
/ 18 января 2010

Я хочу скопировать URL-код javascript для символа char. Как, например, я бы успешно скопировал JavaScript из ссылки «Просмотр источника» на этой странице:

http://javascript.about.com/library/blsource.htm

делает что-то вроде (?):

(function(){
    var w=open('','');
    with(w.document) { 
        write(encodeBlahComponent(document.activeElement.href).replace(/blah/g,'asii equivalent').replace(/blah/g,'unicode equivalent').replace(/blah/g,'entity equivalent'));
        close();
    }
})()

Какую кодировку мне использовать и как правильно ее написать?

Ответы [ 2 ]

0 голосов
/ 21 января 2010

Re: «Кодирование - это функция, которая необходима при переходе из одного контекста в другой, например, из необработанного текста в источник HTML. Если вы возьмете ссылку на ссылку, у вас будет URL-адрес в строке. Если контекст, в котором вы хотите использовать этот URL-адрес, является просто URL-адресом, то вам больше ничего не нужно делать. В этом случае способ «клонировать» строку JavaScript состоит в том, чтобы просто указать var newstring = oldstring. Если целевой контекст является источником HTML, написанным document.write, вам нужно только закодировать его HTML, больше ничего. "

Похоже, я делал из мухи слона. Твой совет не дошел до сих пор. Это был тот самый грубый букмарклет «View Source», который бросил меня (я думал, что автор должен был быть гуру JS!). Я полагаю, еще один из тех моментов "опыта обучения". Не берите в голову. Большое спасибо за вашу поддержку. Тема закрыта и еще раз спасибо.

0 голосов
/ 18 января 2010

Если вы document.write обращаетесь к документу HTML, любой выводимый текст должен быть экранирован HTML:

function encodeHTML(s) { // for text content and attribute values with " delimiter
    return s.split('&').join('&amp;').split('<').join('&lt;').split('"').join('&quot;');
}

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)()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...