现在,我正在开发一个简单的 chrome 扩展。在这个阶段,我正在尝试:
这是我的内容脚本:
// Function to show a container above the clicked word
// Get all text nodes in the DOM
function getTextNodes(node) {
var nodes = [];
if (node.nodeType == Node.TEXT_NODE) {
nodes.push(node);
} else {
var children = node.childNodes;
for (var i = 0, len = children.length; i < len; ++i) {
nodes.push.apply(nodes, getTextNodes(children[i]));
}
}
return nodes;
}
// Get all text content from the DOM, excluding anchor tags and links
function getTextContent() {
var textNodes = getTextNodes(document.body);
var textContent = "";
for (var i = 0, len = textNodes.length; i < len; ++i) {
var parent = textNodes[i].parentNode;
if (
parent.tagName != "A" &&
parent.tagName != "LINK" &&
parent.tagName != "SCRIPT"
) {
textContent += textNodes[i].nodeValue.trim() + " ";
}
}
return textContent.trim();
}
async function replaceInDOM(randomWords) {
for (const word of randomWords) {
const elements = document.querySelectorAll("*");
let firstInstance;
elements.forEach((element) => {
if (element.innerHTML.includes(word)) {
firstInstance = element;
return;
}
});
if (firstInstance) {
const newHTML = firstInstance.innerHTML.replace(
new RegExp(`\\b${word}\\b`, "g"),
`<span class="selected-word">${word}</span>`
);
firstInstance.innerHTML = newHTML;
}
}
}
// Get a random selection of words from the text content
async function getRandomWords(textContent, numWords) {
var words = textContent.split(/\s+/);
var randomWords = [];
var finalWords = [];
for (var i = 0; i < numWords; ++i) {
var index;
var word;
do {
index = Math.floor(Math.random() * words.length);
word = words[index].replace(/[^a-zA-Z]/g, "");
} while (!word);
randomWords.push(word);
}
chrome.runtime.sendMessage(
{
action: "cleanRandomWords",
url: "http://localhost:8000/clean/common",
randomWords: randomWords,
},
async (response) => {
finalWords = response.validWords;
alert(finalWords.length);
await replaceInDOM(finalWords);
}
);
return finalWords;
}
(async () => {
//
var textContent = getTextContent();
var randomWords = await getRandomWords(textContent, 10);
})();
我遇到的问题是:
有没有人对如何改进我的功能有什么建议或想法,以便我更好地解决这些问题?
提前致谢!