1

当您检查 Gmail 的客户端源代码时。有一个VIEW_DATA变量包含许多与用户数据相关的东西。是否可以通过 Javascript 访问这些数据?

4

1 回答 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 回答