2010-08-16 8 views
0

Je voudrais accélérer le développement d'extensions en modifiant une extension existante. Je n'ai aucune expérience avec JavaScript, mais j'ai de l'expérience avec C, C++, Java et Python. J'ai choisi l'extension Regular Expression Search par bizsimon. Voici le code JavaScript du script de contenu que j'essaie de comprendre.Besoin d'aide pour modifier une extension de recherche regex existante

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { sendResponse(chrome_regex_search(request.exp)); }); 

function chrome_regex_search(exp) { 
var tw=document.createTreeWalker(document.getElementsByTagName("body")[0], NodeFilter.SHOW_TEXT, null, false); 
while (node = tw.nextNode()) { 
    node.parentNode.innerHTML=node.parentNode.innerHTML.replace(/<font class="chrome_search_highlight"[^>]*>(.+)<\/font>/igm, '$1'); 
} 

try { 
    var pattern=eval("/(>[^<]*)("+exp+")([^<]*<)/igm"); 
    var tw=document.createTreeWalker(document.getElementsByTagName("body")[0], NodeFilter.SHOW_TEXT, null, false); 
    while(node=tw.nextNode()) { 
    node.parentNode.innerHTML=node.parentNode.innerHTML.replace(pattern, '$1<font class="chrome_search_highlight" style="background: yellow">$2</font>$3'); 
    } 
    return {"count": document.getElementsByClassName("chrome_search_highlight").length}; 
} catch(e) { 
    return {"count": 0}; 
} 
} 

Et voici mes questions:

  1. Que fait ce code?

    node.parentNode.innerHTML = node.parentNode.innerHTML.replace (/]*>(.+) </police>/igm, '$ 1');

  2. Je voudrais ajouter des boutons de navigation qui permettent à l'utilisateur de passer d'un résultat de recherche à un autre. Quels changements sont requis dans le script? Je suppose que maintenant je vais devoir enregistrer un état qui se souvient du résultat de la recherche en cours de visite. Comment puis-je faire passer le navigateur d'un résultat de recherche à un autre?
  3. Tous les commentaires utiles qui aideraient à comprendre le code ou même un code walkthru seraient très appréciés.
+0

s'il vous plaît utiliser pour citer textuellement contre-apostrophes votre code en question n ° 1, une partie de la mise en forme semble perdre –

Répondre

1
  • Question n ° 1: Jason S dit, il est stripping la balise <font>: en particulier ceux qui sont de la classe "chrome_search_highlight". En d'autres termes, il marche l'arbre de noeud de l'élément de corps et en enlevant les faits saillants précédents de coup de recherche.
  • Ensuite, dans la deuxième boucle de marche, il ajoute ces mêmes balises de police autour des occurrences de l'expression rationnelle fournie. Le groupe cryptique (>[^<]*) avant, et le groupe similaire après, l'expression rationnelle est là pour vous aider à faire correspondre le texte de la page réelle, pas le nom d'un élément HTML ou un nom ou une valeur d'attribut. C'est à dire. l'appel de recherche regexp doit être précédé d'un > qui n'est pas suivi d'un < avant la fin de la recherche.

Au lit ...

1

pour votre question # 1: Ce code ressemble à essayer de supprimer une balise <font> de HTML, par exemple. Remplacez <font ...>real content here</font> par real content here.

juste un commentaire de côté: préfèrent utiliser new Regexp(somestring) à eval("/"+somestring+"/"), car l'eval peut conduire à un trou de sécurité possible. (Voir MDC docs pour les détails de syntaxe)

Questions connexes