Search code examples
javascripthttp-redirectuserscripts

How do I get my redirecting script to add a random suffix to select sites?


I've a userscript that redirects to a random site from a list. (Reference: How to redirect to one out of given set of sites?)

How do I get the script to add a random suffix to select sites, like wallbase.cc?

Here's my script so far:

// ==UserScript==
// @name        Multipage, MultiSite slideshow of sorts
// @match       http://*.breaktaker.com/*
// @match       http://*.imageshack.us/*
// @match       http://static.tumblr.com/*
// @match       http://withfriendship.com/images/*
// @match       http://failjudge.com/*
// @match       http://wallbase.cc/*
// ==/UserScript==

var urlsToLoad  = [
    'http://www.breaktaker.com/albums/pictures/animals/BigCat.jpg'
    , 'http://img375.imageshack.us/img375/8105/bigcats34ye4.jpg'
    , 'http://withfriendship.com/images/g/33769/1.jpg'
    , 'http://static.tumblr.com/yd0wcto/LXQlx109d/bigcats.jpg'
    , 'http://failjudge.com/'
    , 'http://wallbase.cc/wallpaper/ + [random number suffix from 1- 10000000000]'
];

setTimeout (GotoRandomURL, 4000);

function GotoRandomURL () {
    var numUrls     = urlsToLoad.length;
    var urlIdx      = urlsToLoad.indexOf (location.href);
    if (urlIdx >= 0) {
        urlsToLoad.splice (urlIdx, 1);
        numUrls--;
    }

    urlIdx          = Math.floor (Math.random () * numUrls);
    location.href   = urlsToLoad[urlIdx];
}

Solution

  • Adding the random suffix, means that the script must change how it checks what site it is on -- as well as how it selects a new URL. So, for those sites, we must check for a partial match.

    But, rather than explain every piece of it, here's a big bunch o' code. ;)   It should be a little self-documenting. :

    // ==UserScript==
    // @name        Multipage, MultiSite slideshow of sorts
    // @match       http://*.breaktaker.com/*
    // @match       http://*.imageshack.us/*
    // @match       http://static.tumblr.com/*
    // @match       http://withfriendship.com/images/*
    // @match       http://failjudge.com/*
    // @match       http://wallbase.cc/*
    // ==/UserScript==
    
    var urlsToLoad  = [
        { url:          'http://www.breaktaker.com/albums/pictures/animals/BigCat.jpg',
          useSuffix:    false
        },
        { url:          'http://img375.imageshack.us/img375/8105/bigcats34ye4.jpg',
          useSuffix:    false
        },
        { url:          'http://withfriendship.com/images/g/33769/1.jpg',
          useSuffix:    false
        },
        { url:          'http://static.tumblr.com/yd0wcto/LXQlx109d/bigcats.jpg',
          useSuffix:    false
        },
        { url:          'http://failjudge.com/',
          useSuffix:    false
        },
        //--- Fur suffix URLs, include everything before the suffix only.
        { url:          'http://wallbase.cc/wallpaper/',
          useSuffix:    true
        }
    ];
    
    /*--- Since many of these sites load large pictures, Chrome's normal or its
        "document end" injection may fire a good deal before the image(s) finish
        loading.
        So, insure script fires after load:
    */
    window.addEventListener (
        "load",
        function () { setTimeout (GotoRandomURL, 4000); },
        false
    );
    if (document.readyState == "complete") {
        setTimeout (GotoRandomURL, 4000);
    }
    
    
    function GotoRandomURL () {
        var numUrls     = urlsToLoad.length;
        var urlIdx      = -1;
    
        for (var J = numUrls - 1;  J >= 0;  --J) {
            if (urlsToLoad[J].useSuffix) {
                //--- Check that URL starts with the specified value
                var prefChk = new RegExp ('^' + urlsToLoad[J].url, 'i');
                if (prefChk.test (location.href) ) {
                    urlIdx  = J;
                    break;
                }
            }
            else {
                if (urlsToLoad[J].url  ==  location.href) {
                    urlIdx  = J;
                    break;
                }
            }
        }
    
        if (urlIdx >= 0) {
            urlsToLoad.splice (urlIdx, 1);
            numUrls--;
        }
    
        urlIdx          = Math.floor (Math.random () * numUrls);
        var targURL     = urlsToLoad[urlIdx].url;
    
        if (urlsToLoad[urlIdx].useSuffix) {
            //--- Note:  wallbase.cc currently has less than 2-million wallpapers.
            targURL    += Math.ceil (Math.random () * 2000000);
        }                                              
        console.log ('\n\n***\n', targURL, '\n***\n\n');
        location.href   = targURL;
    }