2012-04-09 3 views

Antwort

1

Es sieht so aus, als ob es nach der Verwendung VIEW_DATA auf undefined zurückgesetzt wird, vielleicht um Speicher zu sparen. Gmail scheint fast alles sauber in Verschlüssen zu halten, was es schwierig macht, aus dem globalen Kontext herauszukommen.

Ein möglich- aber zerbrechlich -Ansatz das DOM für das <script> Element abfragen würde, wo VIEW_DATA definiert ist, mit dem Sie die Original-Skript geben würde, Sie eval() es in Ihrem eigenen Kontext zu lassen. Z.B .:

// get all of the <script> elements on the page 
var scripts = document.getElementsByTagName('script'), 
    thisScript, varViewDataPos, viewDataScript, viewData 
; 

// loop through each one looking for VIEW_DATA being defined 
for(var i = 0; i < scripts.length; i++) { 
    thisScript = scripts[ i ].textContent; 
    varViewDataPos = thisScript.indexOf('var VIEW_DATA='); 

    if(varViewDataPos >= 0) { 
    // might as well toss everything before VIEW_DATA is defined 
    viewDataScript = thisScript.slice(varViewDataPos); 
    break; 
    } 
} 

// eval what we found (if anything), but in a closure to avoid polluting 
// the global namespace 
viewData = (function(script) { 
    eval(script); 
    return VIEW_DATA; 
})(viewDataScript); 

console.log(viewData || 'Oops, script not found.'); 

Wie ich schon sagte, obwohl, wie jeder Screen-Scraping diese ziemlich zerbrechlich ist. Wenn Google etwas bewegt, werden Sie plötzlich Dinge finden, die Sie nicht wollen, wie Funktionsaufrufe, die die Seite brechen. Verwenden Sie es auf eigene Gefahr.

Sie finden vielleicht, dass letztlich andere Methoden, wie zum Beispiel die Suche nach den Daten, die Sie im DOM suchen, sinnvoller sind.

+0

Splendid! Danke vielmals. –

Verwandte Themen