Просмотреть исходный букмарклет: Получить оригинальный источник? - PullRequest
2 голосов
/ 02 апреля 2012

Букмарклет, который я использую, берет src текущей страницы следующим образом:

...
pre.appendChild(doc.createTextNode(document.documentElement.innerHTML));
...

В результате получается, что при поиске document.documentElement.innerHTML выдает все, что браузер выдает в виде строки.

Это не то же самое, что фактический исходный источник, поскольку, например, страница могла быть изменена с помощью javascript.

Возможно ли, чтобы букмарклет снова получал страницу, используя XHR или что-то подобное?

Моя цель - создать букмарклет, который ПОЛУЧИТ свежую копию страницы в строку js, которую я могу отправить на beautify.js, чтобы очистить ее (она предоставляет отличные инструменты для очистки HTML, CSS и JS) Затем я заполняю <pre> полученной в результате украшенной исходной строкой, которую затем буду использовать prettify.js. Поскольку можно будет напрямую ссылаться на файлы js этих соответствующих проектов из моего букмарклета, это будет в основном король всех закладок вида-источника.

На сегодняшний день я использую очень хорошие инструменты, встроенные в такие браузеры, как Google Chrome и Opera, но с тех пор, как у меня появился новый iPad, мне очень нравится читать на нем код, поэтому я пытаюсь перенести свой рабочий процесс туда.

1 Ответ

1 голос
/ 02 апреля 2012

Вот пример использования XHR:

var factories=[
    function(){return new ActiveXObject("Microsoft.XMLHTTP")}, // for old IE
    function(){return new XMLHttpRequest()}
];

function XHRMaker(){
    var xhr=false,
        i=factories.length;
    while (0<=--i) {
        try {
            xhr=factories[i]();
            break;
        }catch (e){}
    }
    return xhr;
}

function getSource(cb){
    var xhr=XHRMaker();
    if (false===xhr) return false;
    xhr.open('GET',window.location.href,true);
    xhr.onreadystatechange=function(){
        if (4!==xhr.readyState) return;
        delete xhr.onreadystatechange;
        cb(xhr.responseText);
    };
    xhr.send(null);
}

getSource(function(html){
    alert(html);
});

используя компилятор замыкания, он компилируется в:

var c=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new XMLHttpRequest}];function d(){for(var b=!1,a=c.length;0<=--a;)try{b=c[a]();break}catch(e){}return b}(function(b){var a=d();if(!1===a)return!1;a.open("GET",window.location.href,!0);a.onreadystatechange=function(){4===a.readyState&&(delete a.onreadystatechange,b(a.responseText))};a.send(null)})(function(b){alert(b)});

или в виде кода букмарклета:

javascript:(function(){var%20c=[function(){return%20new%20ActiveXObject("Microsoft.XMLHTTP")},function(){return%20new%20XMLHttpRequest}];function%20d(){for(var%20b=!1,a=c.length;0<=--a;)try{b=c[a]();break}catch(e){}return%20b}(function(b){var%20a=d();if(!1===a)return!1;a.open("GET",window.location.href,!0);a.onreadystatechange=function(){4===a.readyState&&(delete%20a.onreadystatechange,b(a.responseText))};a.send(null)})(function(b){alert(b)});}());void(0);
...