如何使用userscript更改指向特定文件扩展名的链接的颜色?

时间:2016-10-22 23:49:06

标签: greasemonkey userscripts tampermonkey

我的学校网站有家庭作业下载链接,我想通过给它们涂上不同的颜色来区分它们 EG:Microsoft Word文件为蓝色,.RTF文件为绿色 由于我是新手,因此我的脚本都没有工作。

我的剧本:

// ==UserScript==
// @name         Homework Help
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Color links for different file extensions
// @author       You
// @match        (My School Website)
// @grant        none
// ==/UserScript==

function getFileExtension(filename) {
    return filename.split('.').pop();
}

(function() {
    'use strict';

    // Your code here...
    var links = document.getElementByTagName("a");
    var element;

    for (var i = 0; i < links.lenth(); i++){

        element = rtfs[i];

        if( getFileExtension(element.href) == "rtf" ){
            element.style.color = "green";
        }
    }
})();

我尝试使用谷歌搜索,但没有找到解决方案。

1 个答案:

答案 0 :(得分:1)

  1. 您学校的网站可能会使用AJAX加载文件列表。如果 在这种情况下,您需要使用支持AJAX的技术。
  2. 另外,正如wOxxOm所指出的,代码中存在语法错误。
  3. 有时,根据网站的CSS,您可能需要here
  4. 以下完整脚本使用jQuery和waitForKeyElements()来解决第1项和第1项。 2(它也适用于静态页面):

    // ==UserScript==
    // @name     _Color code links by file extension
    // @match    http://YOUR_SERVER.COM/YOUR_PATH/*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
    // @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
    // @grant    GM_addStyle
    // ==/UserScript==
    //- The @grant directive is needed to restore the proper sandbox.
    
    // PICK A MORE PRECISE SELECTOR IF YOU CAN.
    waitForKeyElements ("a", colorLink);
    
    function colorLink (jNode) {
        var fileHref        = jNode.attr ("href");
        if ( ! fileHref)    return; //-- Not every link has an href.
    
        var fileExt         = fileHref.split ('.').pop ().toLowerCase ();
        switch (fileExt) {
            case "rtf":
                jNode.css ("color", "green");
            break;
            case "doc":
                jNode.css ("color", "pink");
            break;
            default:
                //-- No action needed.
            break;
        }
    }
    

    注意:jQuery选择器"a"将过滤每个链接!但我们需要页面详细信息来选择更有针对性的选择器。使用use the !important flag中显示的技术缩小选择范围。