[英]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};
}
}
以下是我的問題:
這段代碼有什么作用?
node.parentNode.innerHTML = node.parentNode.innerHTML.replace(/]*>(.+)</ font> / igm,'$ 1');
對於您的問題1:該代碼看起來像是試圖從HTML中剝離<font>
標記,例如,將<font ...>real content here</font>
更改為real content here
。
只是一個側面的注釋:與eval("/"+somestring+"/")
,更喜歡使用new Regexp(somestring)
eval("/"+somestring+"/")
,因為eval可能導致可能的安全漏洞。 (有關語法的詳細信息,請參閱MDC文檔 )
<font>
標記:特別是那些屬於“ chrome_search_highlight”類的標記。 換句話說,它正在遍歷body元素的節點樹並刪除以前的搜索命中重點。 (>[^<]*)
組,之后是類似的組,以幫助確保您匹配的是實際的頁面文本,而不是HTML元素的名稱或屬性名稱或值。 也就是說,regexp搜索命中必須在>
之前,然后是<
直到搜索命中之后。 去睡覺了...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.