2010-08-16 50 views
0

我想通過修改現有的擴展來擴展開發。 我對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(/]*>(.+)</font>/igm,'$ 1');

  2. 我想添加導航按鈕,使用戶從一個搜索結果移動到另一個。腳本中需要進行哪些更改?我假設現在我需要保存一些記住當前正在訪問的搜索結果的狀態。如何讓瀏覽器從一個搜索結果跳轉到另一個搜索結果?
  3. 任何有用的意見,這將有助於理解代碼甚至代碼walkthru將非常感激。
+0

請使用反引號來逐字引用你的代碼的問題#1,有些格式似乎丟失 – 2010-08-17 00:12:23

回答

1
  • 問題1:賈森S說,它剝<font>標籤:特別是那些是「chrome_search_highlight」類的。換句話說,它走在body元素的節點樹上並刪除以前的搜索命中高亮。
  • 然後在第二個樹狀漫步循環中,它會在提供的正則表達式的出現周圍添加相同的字體標籤。隱藏的(>[^<]*)組之前以及之後的類似組,正則表達式有助於確保您匹配實際頁面文本,而不是HTML元素的名稱或屬性名稱或值。即正則表達式搜索命中必須在>之後,直到搜索命中之後纔會跟着<

關睡覺......

1

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

只是一邊評論:更喜歡使用new Regexp(somestring)eval("/"+somestring+"/"),因爲評估可能導致一個可能的安全漏洞。 (見MDC docs語法細節)