我想通过修改现有扩展来扩展扩展。 我没有使用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};
}
}
以下是我的问题:
这段代码做了什么?
node.parentNode.innerHTML = node.parentNode.innerHTML.replace(/] *&gt;(。+)&lt; / font&gt; / igm,'$ 1');
答案 0 :(得分:1)
对于您的问题#1:该代码似乎正在尝试从HTML中删除<font>
代码,例如将<font ...>real content here</font>
更改为real content here
。
只是一个侧面评论:更喜欢使用new Regexp(somestring)
到eval("/"+somestring+"/")
,因为评估可能导致可能的安全漏洞。 (有关语法细节,请参阅MDC docs)
答案 1 :(得分:1)
<font>
标签:特别是那些属于“chrome_search_highlight”类的标签。换句话说,它正在遍历body元素的节点树并删除之前的搜索突出显示。(>[^<]*)
组以及之后的类似组有助于确保您匹配实际页面文本,而不是HTML元素的名称或属性名称或值。即在搜索匹配之前,正则表达式搜索匹配必须前跟>
,后面跟<
。上床睡觉......