与突出显示来自不同网站的文本不一致
Inconsistency with Highlighting Text from Different Websites
我使用以下代码来突出显示chrome扩展程序的内容脚本中的"and"一词。
function findText(element, pattern, callback) {
for (var childi= element.childNodes.length; childi-->0;) {
var child= element.childNodes[childi];
if (child.nodeType==1) {
findText(child, pattern, callback);
} else if (child.nodeType==3) {
var matches= [];
var match;
while (match= pattern.exec(child.data))
matches.push(match);
for (var i= matches.length; i-->0;)
callback.call(window, child, matches[i]);
}
}
}
findText(document.body, /'band'b/g, function(node, match) {
var span= document.createElement('span');
span.className= 'highlight';
node.splitText(match.index+3);
span.appendChild(node.splitText(match.index));
node.parentNode.insertBefore(span, node.nextSibling);
});
这段代码成功地在维基百科等页面上突出显示了单词"and",但是当我导航到更复杂的网站(如 espn.com 或 cnn.com(时,它无法突出显示单词"and"。
我猜我接近 DOM 树的方式有问题,但无法安静地弄清楚。
通过Chrome扩展程序突出显示页面上的文本必须通过"内容脚本">完成。内容脚本的目的是收集数据或使用CSS/Javascript浏览的页面进行更改。因此,我们需要将 highlight(( 函数放在内容脚本中。
下面是 highlight(( 方法的示例代码:
highlight('yellow');
在内容脚本中,需要侦听来自扩展的请求,以便我们向其发送所选文本:
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
sendResponse({data: window.getSelection().toString()});
else
sendResponse({}); // snub them.
});
相关文章:
- 如何更改网站上显示的文本
- 在我的网站上以纯文本形式添加最新推文
- 如何使用注入Firefox控制台的js文本来更改网站的背景图像-示例提供
- 如何使用JavaScript或jQuery将纯文本网站捕获到变量中
- 如何使用文本框在网站上保存更改
- 在网站HTML页面上搜索文本
- 如何在网站上创建仅显示文本的简单弹出窗口
- 在其他网站上查找/着色/标记文本
- 我正在尝试使用JS/JQuery自动对网站中的文本执行多个查找和替换操作
- 是否覆盖网站上文本输入区域的默认移动设备键盘?(HTML/JS/jQuery)
- 为网站创建用户生成的文本
- Chrome扩展:弹出操作网站上的文本框
- 我正在尝试为一个网站创建一个文本框,可以将文本更改为用户希望的任何格式
- 如何只将类似facebook的文本框输入我的网站
- 试图弄清楚某个网站的文本动画是否是用某个库或插件完成的
- 从网站中删除文本选择限制的脚本
- 只有文本从我的网站加载在火狐上
- 谷歌文档,用于在网站上提供文本
- 修复视差网站上的文本
- 脚本改变网站文本基于域名