当您检查 Gmail 的客户端源代码时。有一个VIEW_DATA
变量包含许多与用户数据相关的东西。是否可以通过 Javascript 访问这些数据?
问问题
438 次
1 回答
1
看起来在使用后的某个时间点VIEW_DATA
被重置为undefined
,也许是为了节省内存。Gmail 似乎将几乎所有东西都整齐地隐藏在封闭中,这使得从全球环境中获取它变得困难。
一种可能(<em>但脆弱)的方法是在 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 中查找您要查找的数据)更为明智。
于 2012-04-09T13:02:46.620 回答