突出显示文本的用户脚本可在控制台中使用,但不能在Tampermonkey中使用

时间:2018-07-28 01:04:21

标签: javascript google-chrome highlight userscripts tampermonkey

我正在尝试找到一种方法,以使以下代码可以在页面加载时加载(或我猜是在之后),并自动突出显示页面上的某些单词或短语。现在,除非将其插入控制台,否则代码不会启动。我一直在测试的代码在很大程度上受过去的线程(Greasemonkey: Highlight many words in a HTML-File)的影响,并在下面列出:

// ==UserScript==
// @name        Highlight Text
// @description Highlights text within HTML
// @require  https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// @grant    GM.getValue
// ==/UserScript==

function highlightWord(word) {
    var xpath = "//text()[contains(., '" + word + "')]";
    var texts = document.evaluate(xpath, document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    for (n = 0; n < texts.snapshotLength; n++) {
        var textNode = texts.snapshotItem(n);
        var p = textNode.parentNode;
        var a = [];
        var frag = document.createDocumentFragment();
        textNode.nodeValue.split(word).forEach(function(text, i) {
            var node;
            if (i) {
                node = document.createElement('span');
                node.style.backgroundColor = 'lightgreen';
                node.appendChild(document.createTextNode(word));
                frag.appendChild(node);
            }
            if (text.length) {
                frag.appendChild(document.createTextNode(text));
            }
            return a;
        });
        p.replaceChild(frag, textNode);
    }
}
highlightWord('sample');

例如,我想在以下页面上突出显示单词“ sample”:https://www.snapsurveys.com/survey-software/sample-surveys/

我无法获取代码以在页面加载时自动突出显示文本。我做了一些研究,我认为该页面可能受AJAX的影响,因此赠款位于顶部。现在,在页面加载时什么也没有发生,但是当我手动将代码插入页面的控制台时,它可以正常工作,并且指定的文本确实被突出显示。这似乎是一个非常简单的修复程序,但是我显然掩盖了某些东西。预先感谢!

1 个答案:

答案 0 :(得分:-1)

我未能意识到Highlightword区分大小写,并且我还在想要的特定站点上使用了@include,现在它可以正常工作了。