Reverse Engineering the DOM, les événements Javascript et "What's going on"?

J'essaie de comprendre ce qui se passe dans le javascript de l'aperçu de la page en direct de Google.

Pourquoi ne sont-ils pas les liens que j'ajoute au DOM avec Javascript clickable? (Pour un peu plus de contexte)

Http://chesser.ca/2010/11/google-visual-image-search-hack-marklet/ pour la "dernière démo"

Si vous recherchez sur Google, les résultats s'affichent à la page via la recherche en direct. Ensuite, si vous passez la souris sur l'une des loupe de votre ensemble de résultats, plusieurs choses se produisent.

  1. L'événement de mousover pour les feux de loupe
  2. Cela appelle une fonction (à ce jour) inconnue avec des paramètres inconnus
  3. La fonction effectue un appel inter-site au serveur de requêtes de résultats d'image de Google
  4. Ces résultats sont stockés dans la mémoire de classe VS de google `google.vs.ha`

J'ai copié le code de la bibliothèque de google et l'ai exécuté à travers un non-minifieur, donc il est légèrement plus lisible. J'ai également installé des points d'arrêt dans le code via Firebug afin que je puisse inspecter l'espace dom et mémoire avant pendant et après le chargement de la page.

Mon objectif final est de pouvoir reproduire l'événement mousover dans le code en appelant la même fonction que celle appelée – mais – je suis coincé en essayant de trouver la bonne fonction. (Je suis sûr que cela implique google.vs.Ga(a, b, c) mais je ne suis tout simplement pas là encore.

Je sais que c'est à peu près l'obsession la plus folle que je sois jamais – mais je ne sais pas. Peut-être que si vous lisez également la pile un dimanche, vous comprenez 🙂

Quelle fonction s'appelle "On Hover" qui envoie la commande pour obtenir les demandes d'image?

EDIT: Il y a quelques versions positives à ce sujet jusqu'à présent, je pensais ajouter un peu plus d'arrière-plan à quiconque voulait se rattraper dans un firebug, vous pouvez suivre ce qui se passe en javascript à tout moment.

Une image de ce que Google a l'air "en mémoire" vous permet de regarder toutes les fonctions et les appels et l'état actuel des variables.

Vous pouvez également accéder et appeler ces variables en mettant des liens dans votre barre de signets. Par exemple javascript:alert(google.base_href) après une recherche vous indiquera l'URL que vous êtes à … et il devient beaucoup plus excitant à partir de là.

EDIT NUMER 2:

Un grand merci à Matt qui a réussi à craquer en une seule fois 🙂

  <a href="javascript: (function(){ var all_divs = document.getElementsByTagName('div'); for (i=0;i < all_divs.length; i++) { if (all_divs[i].className == 'vsc') { google.vs.ea(all_divs[i]); } } })();">test all vsc</a> 

Ma démarche: J'ai couru un profiler et j'ai survolé les résultats autant de fois que possible (pour espérer que la fonction se démarque dans les résultats du profiler)

La fonction d'aperçu semble être google.vs.P

Il est appelé avec les arguments suivants:

  • Élément DOM pour le résultat (div.vsc)
  • Informations de résultat (ressemble à la boutique google.vs.ha )

Le deuxième argument est calculé par google.vs.ea , qui prend un paramètre DOM comme paramètre.

Je suppose que, puisqu'il ne prend que l'élément en tant que paramètre unique, c'est probablement la fonction appelée sur le vol stationnaire.

Donc, l'auditeur de survoltage ressemble probablement à ceci:

 document.addEventListener('mouseover', function (event) { if (/\bvsc\b/.test(event.target.className)) { console.log('preview!'); google.vs.ea(event.target); } }, false); 

Explication

Comme demandé ci-dessous, voici un peu plus d'informations

J'ai couru le profiler fourni avec Webkit Inspector à Chromium. Après avoir survolé les résultats à plusieurs reprises, les résultats du profiler ressemblaient à ceci:

Profiler

Comme vous pouvez le voir, les fonctions atteignaient en fait le sommet.

google.vs.P , j'ai décidé de surcharger google.vs.P et google.vs.ea pour simplement imprimer les arguments qui leur ont été envoyés:

Fonctions surchargées

Comme vous pouvez le voir dans la capture d'écran … en regardant les arguments, la relation entre les deux fonctions devient un peu plus claire. (Mais, bien sûr, il y a encore beaucoup de creusage pour faire ce trou de lapin …)

J'espère que cela t'aides.