如何制作一个将特定单词转换为超链接的chrome扩展?

时间:2017-11-08 18:02:33

标签: javascript google-chrome replace google-chrome-extension hyperlink

我正在尝试制作一个chrome扩展程序,在页面上找到某些单词并将其转换为超链接。例如,如果我访问的网站上有"搜索"写在某个地方,然后该单词将变成我可以点击的链接(它仍然会显示为单词但可能是不同颜色或其他内容)并被重定向到" www.google.com"。

我有一个代码可以查找单词并将其更改为其他单词,但我不知道如何将它们更改为超链接。这是我的JavaScript:

walk(document.body);    
function walk(node)  
{       
    var child, next;    
    switch ( node.nodeType )  
    {
        case 1: 
        case 9:  
        case 11: 
            child = node.firstChild;
            while ( child ) 
            {
                next = child.nextSibling; 
                walk(child);
                child = next;
            }
            break;    
        case 3: 
            handleText(node);
            break;
    }
}

function handleText(textNode) 
{
    var v = textNode.nodeValue;    
    v = v.replace(/\bsearch\b/g, (str.link("https://www.google.com")));
    v = v.replace(/\bsearch\b/g, <a href="http://www.google.com">asdf</a>);

    textNode.nodeValue = v;
}

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

将HTML解析为DOM,这就是您要遍历的内容。您并没有真正替换DOM,而是使用未解析的HTML替换文本节点,而这些HTML不会起作用。相反,您需要将文本节点替换为具有所需URL和文本的<a>节点。

答案 1 :(得分:0)

您必须使用已解析的HTML元素替换文本节点。

更改

monolog:
    use_microseconds: false
    handlers:
        main:
            type:  rotating_file
            path:  '%kernel.logs_dir%/%kernel.environment%.log'
            level: error
            max_files: 14

类似

    textNode.nodeValue = v;

此外,请确保在遍历DOM时忽略锚点(node.tagName ==='A'),否则您最终可能会替换现有锚点内的文本。