2012-04-09 62 views

回答

1

它在使用後的某個點看起來很像VIEW_DATA重置爲undefined,可能是爲了節省內存。 Gmail似乎將幾乎所有東西放在封閉的地方,這使得從全球背景下難以獲得它。

一個possible- 但脆弱 -approach將查詢DOM爲<script>元素,其中VIEW_DATA定義,這將使您的原始腳本,讓你eval()它在自己的範圍內。例如:

// 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.'); 

就像我說的,雖然,就像任何屏幕一樣,這很脆弱。如果谷歌在你身邊移動任何東西,你可能會發現自己突然評估了你不想要的東西,比如函數調用將最終打破頁面。需要您自擔風險使用它。

您可能發現最終其他方法(如嘗試在DOM中查找您要查找的數據)更明智。

+0

絢爛!非常感謝。 – 2012-04-09 13:14:19