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];
}
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;
}