簡體   English   中英

在修改現有正則表達式搜索擴展方面需要幫助

[英]Need help with modifying an existing regex search extension

我想通過修改現有擴展來擴展擴展。 我對JavaScript的使用經驗為零,但對C,C ++,Java和Python卻確實有經驗。 我選擇了bizsimon的正則表達式搜索擴展。 這是我試圖理解的內容腳本的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(/]*>(.+)</ font> / igm,'$ 1');

  2. 我想添加導航按鈕,使用戶能夠從一個搜索結果移至另一搜索結果。 腳本中需要進行哪些更改? 我假設現在我將需要保存一些狀態,以記住當前正在訪問哪個搜索結果。 如何使瀏覽器從一個搜索結果跳轉到另一個?
  3. 我們將不勝感激任何有益的注釋,這些注釋有助於理解代碼,甚至幫助您理解代碼。

對於您的問題1:該代碼看起來像是試圖從HTML中剝離<font>標記,例如,將<font ...>real content here</font>更改為real content here

只是一個側面的注釋:與eval("/"+somestring+"/") ,更喜歡使用new Regexp(somestring) eval("/"+somestring+"/") ,因為eval可能導致可能的安全漏洞。 (有關語法的詳細信息,請參閱MDC文檔

  • 問題1:正如Jason S所說,它正在剝離<font>標記:特別是那些屬於“ chrome_search_highlight”類的標記。 換句話說,它正在遍歷body元素的節點樹並刪除以前的搜索命中重點。
  • 然后在第二個樹遍歷循環中,在出現的正則表達式周圍添加這些相同的字體標簽。 regexp之前是一個神秘的(>[^<]*)組,之后是類似的組,以幫助確保您匹配的是實際的頁面文本,而不是HTML元素的名稱或屬性名稱或值。 也就是說,regexp搜索命中必須在>之前,然后是<直到搜索命中之后。

去睡覺了...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM