1

Gmail のクライアント ソース コードを確認すると、VIEW_DATAユーザーのデータに関連する多くのものを保持する変数があります。Javascript 経由でこのデータにアクセスすることは可能ですか?

4

1 に答える 1

1

使用後のある時点で、おそらくメモリを節約するためににVIEW_DATAリセットされているように見えます。undefinedGmailは、ほとんどすべてのものをクロージャにきちんと収納しているように見えるため、グローバルなコンテキストからGmailにアクセスするのは困難です。

考えられる1つのアプローチは、<em>しかし脆弱ですが、定義されている<script>要素についてDOMにクエリを実行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.' );

ただし、私が言ったように、他のスクリーンスクレイピングと同様に、これはかなり壊れやすいものです。Googleが何かを動かした場合、ページを壊してしまう関数呼び出しなど、突然評価したくないものに気付く可能性があります。自己責任で使用してください。

代わりにDOMで探しているデータを見つけようとするなど、最終的には他の方法の方が賢明であることがわかる場合があります。

于 2012-04-09T13:02:46.620 に答える