需要有关修改现有正则表达式搜索扩展的帮助

时间:2010-08-16 23:35:31

标签: javascript regex google-chrome-extension

我想通过修改现有扩展来扩展扩展。 我没有使用JavaScript的经验,但我确实有C,C ++,Java和Python方面的经验。 我选择了bizsimon的Regular Expression Search扩展名。 这是我想要了解的内容脚本的JavaScript代码。

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};
 }  
}

以下是我的问题:

  1. 这段代码做了什么?

    node.parentNode.innerHTML = node.parentNode.innerHTML.replace(/] *&gt;(。+)&lt; / font&gt; / igm,'$ 1');

  2. 我想添加导航按钮,使用户可以从一个搜索结果移动到另一个搜索结果。脚本需要进行哪些更改?我假设现在我需要保存一些记住当前正在访问哪个搜索结果的状态。如何让浏览器从一个搜索结果跳转到另一个搜索结果?
  3. 非常感谢任何有助于理解代码甚至代码漫游的有用评论。

2 个答案:

答案 0 :(得分:1)

对于您的问题#1:该代码似乎正在尝试从HTML中删除<font>代码,例如将<font ...>real content here</font>更改为real content here

只是一个侧面评论:更喜欢使用new Regexp(somestring)eval("/"+somestring+"/"),因为评估可能导致可能的安全漏洞。 (有关语法细节,请参阅MDC docs

答案 1 :(得分:1)

  • 问题#1:正如Jason S所说,它正在剥离<font>标签:特别是那些属于“chrome_search_highlight”类的标签。换句话说,它正在遍历body元素的节点树并删除之前的搜索突出显示。
  • 然后在第二个树行走循环中,它在所提供的正则表达式的出现周围添加相同的字体标记。 resexp之前的隐藏(>[^<]*)组以及之后的类似组有助于确保您匹配实际页面文本,而不是HTML元素的名称或属性名称或值。即在搜索匹配之前,正则表达式搜索匹配必须前跟>,后面跟<

上床睡觉......