[英]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.