2012-04-01 19 views
2

Das Bookmarklet I greift die aktuelle Seite src auf diese Weise verwenden:Quelle anzeigen bookmarklet: Ursprüngliche Quelle abrufen?

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

Was passiert, ist, dass diese Deponien, was die Browser-Ausbeuten als String aus, wenn document.documentElement.innerHTML aufzublicken.

Dies ist nicht das gleiche wie die eigentliche Originalquelle, da die Seite beispielsweise durch Javascript geändert werden könnte.

Ist es möglich, dass das Bookmarklet die Seite erneut mit einem XHR oder einem ähnlichen Gerät ruft?

Mein Ziel ist es, ein Bookmarklet zu haben, das eine neue Kopie der Seite in eine js Zeichenfolge bekommt, die ich an beautify.js senden kann, um es aufzuräumen (es bietet großartige Werkzeuge zum Aufräumen von HTML, CSS und JS), dann fülle ich eine <pre> mit der daraus resultierenden verschönerten Quellzeichenfolge, die ich dann prettify.js verwenden werde. Da es möglich sein wird, direkt mit den entsprechenden js Dateien von meinem Bookmarklet zu verlinken, wird dies im Grunde der König aller View-Source-Lesezeichen sein.

Bis heute habe ich die sehr guten Tools in Browsern wie Google Chrome und Opera verwendet, aber seit ich das neue iPad habe, genieße ich es, Code zu lesen, also versuche ich, meinen Workflow dorthin zu verlagern.

+0

interessante Sounds, tun Sie habe ein Repository oder ein paar Gipse, die ich mir anschauen könnte? –

+0

Noch nicht, ich könnte etwas auf GitHub einrichten, sobald ich etwas cooles arbeite. –

+0

@VictorBjelkholm können Sie sehen, was ich früher heute hier gearbeitet habe http://stackoverflow.com/questions/9966382/how-to-specify-a-font-from-javascript –

Antwort

1

Hier ist ein Beispiel unter Verwendung von 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); 
}); 

Verschluss-Compiler, es kompiliert bis:

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)}); 

oder als Bookmarklet Code:

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); 
+0

Danke. Ich nehme an, ich kann 'document.URL' anstelle von' window.location.href' verwenden? –

+0

Ja können Sie: http://StackOverflow.com/Questions/5388036/Difference-between-Document-URL-and-Location-HRef – stewe

+0

... Und eine Sache, die ich heute gelernt habe, ist nie eine '//' Kommentar in verwenden ein Bookmarklet ... Ich bin überrascht, dass all meine ungeschulten Charaktere auch durchgegangen sind. –