gpt4 book ai didi

javascript - 突出显示 Chrome 扩展中的所有单词

转载 作者:太空狗 更新时间:2023-10-29 15:41:21 25 4
gpt4 key购买 nike

我是一个尝试创建 chrome 扩展程序的初学者。在这个扩展中,我想要一个 popup.html 文件,上面有按钮“突出显示”。如果用户点击突出显示,页面中的所有单词都应突出显示。

list

"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs", "activeTab"
]

Popup.html

<!DOCTYPE html> 
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
<button id="highlight">Highlight</button>
</body>
</html>

弹出窗口

window.onload = function(){
document.getElementById('highlight').onclick = highLight;
function = highLight(){
//How can I make all the text highlighted
}
};

如何访问 DOM 以便突出显示每个单词?

提前致谢!

最佳答案

通过 Chrome 扩展突出显示页面上的文本(或在页面上执行任何操作)必须通过 Content Script 来完成.但是,您的弹出窗口必须与内容脚本对话,以告诉它在弹出窗口中单击按钮时突出显示页面。这叫做 Message Passing .

您的 popup.js 应如下所示:

document.getElementById('highlight').addEventListener('click', sendHighlightMessage, false);

function sendHighlightMessage() {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {highlight: true}, function(response) {
console.log(response);
});
});
}

content_script.js 是实际发生 DOM 操作的地方。它应该监听来自您的弹出窗口的消息并适本地突出显示该页面。它应该包含以下内容:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.highlight === true) {
highlightText(document.body);
sendResponse({messageStatus: "received"});
}
});

通读有关内容脚本和消息传递的 Chrome 扩展文档(上面链接),以更完整地解释这里发生的事情。

实际上,在选择文本时突出显示页面上的文本(例如单击并拖动文本以进行复制和粘贴)不能在文本区域或输入字段之外以编程方式完成。但是,您可以使用样式来更改文本的背景颜色。为了仅突出显示文本,您需要使用突出显示样式将每个文本节点包裹在一个跨度中。这是大量的 DOM 操作,将完全破坏原始页面。您应该考虑这对您的扩展是否真的有必要和有用。也就是说,它看起来像这样:

function highlightText(element) {
var nodes = element.childNodes;
for (var i = 0, l = nodes.length; i < l; i++) {
if (nodes[i].nodeType === 3) // Node Type 3 is a text node
var text = nodes[i].innerHTML;
nodes[i].innerHTML = "<span style='background-color:#FFEA0'>" + text + "</span>";
}
else if (nodes[i].childNodes.length > 0) {
highlightText(nodes[i]); // Not a text node or leaf, so check it's children
}
}
}

关于javascript - 突出显示 Chrome 扩展中的所有单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20795142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com