Vkontakte 2.0 Refresh

By Maksim Last update Feb 9, 2010 — Installed 3,652 times.

There are 12 previous versions of this script.

// ==UserScript==
// @name           Vkontakte 2.0  Refresh
// @description    Reloads Inbox Automatically thru ajax request
// @include        http://vkontakte.ru/*
// @include        http://vk.com/*

// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
// ==/UserScript==
// Copyright Nagaev Maksim  <nagaev.maksim@gmail.com>
var cntold = 0;
var pagetitle = document.title;
var mydiv = document.createElement('div');
mydiv.width = "10";
mydiv.height = "10";
mydiv.id = "mydiv";
mydiv.style.display = "none";
document.body.appendChild(mydiv);

// Refresh Settings
var reload = GM_getValue("reload", 30); // Amount of seconds between reloads
GM_registerMenuCommand("Set Refresh Time", function(){
    var time = prompt("Seconds between refreshes:\n(must be greater than 1)", reload / 1000);
    window.location.reload();
    if (time >= 1) {
        GM_setValue("reload", time);
        reload = GM_getValue("reload", 30);
    }
    else 
        if (time < 1) {
            alert('The number must be greater than 1!');
        }
        else {
            alert('Must be a number!');
        }
});
reload = reload * 1000;

function VKRefresh(){
	
	var counterElement = jQuery("#nav a[href*='mail.php'] b");
	var allMessagesElement = jQuery("#nav a[href*='mail.php']");
	var href = window.location.host;
	var site = (href.indexOf("vk.com") != -1 ? 'com' : 'ru');
	var setNewIcon = function () {
		if (site == 'ru') {
			jQuery("link[href='/images/favicon.ico']").replaceWith("<link href='http://img527.imageshack.us/img527/9803/faviconiq1.gif' rel='shortcut icon'/>");
		} else if(site == 'com'){
			jQuery("link[href='/images/faviconvk.ico']").replaceWith("<link href='http://img402.imageshack.us/img402/6467/faviconvk.gif' rel='shortcut icon'/>");
		}
	}
	var setStdIcon = function () {
		if (site == 'ru') {
			jQuery("link[href='http://img527.imageshack.us/img527/9803/faviconiq1.gif']").replaceWith("<link href='http://vkontakte.ru/images/favicon.ico' rel='shortcut icon'/>");
		} else if(site == 'com'){
			jQuery("link[href='http://img402.imageshack.us/img402/6467/faviconvk.gif']").replaceWith("<link href='/images/faviconvk.ico' rel='shortcut icon'/>");
		}
	}
    //make sure there is no conflict between jQuery and other libraries

    jQuery.getJSON("mail.php", function(data){
        var patt = /<table.*class="inbox">[\s\S]*<\/table>/i
        var result = patt.exec(data.content).toString();

        // Т.к. при добавлении html в innerHTML происходит разбор html, то подгружаются все
        // указанные в документе ресурсы, надо это каким то образом предотвращать...
        // например заменой атрибутов href, src, import, data на не валидные
        
        result = result.replace(/\bhref=/gi, "_href=");
        result = result.replace(/\bsrc=/gi, "_src=");
        result = result.replace(/\bimport=/gi, "_import=");
        result = result.replace(/\bdata=/gi, "_data=");
        
        //Таблицу делаем валидной
        var tblcontent = result.replace(/<table.*class="inbox">/, '').replace(/<\/table>/, '')
        jQuery("#mydiv").html('<table><thead><tr><th></th></tr></thead><tbody>' + tblcontent + '</tbody><tfoot><tr><th></th></tr></tfoot></table>');
        var cnt = jQuery("#mydiv .newRow .messageSnippet .messageBody").length;

        if (cnt) {
            if (counterElement.length) {
				counterElement.html(cnt);	
            } else {
                allMessagesElement.html('Мои Сообщения (<b>' + cnt + '</b>)');
            }
            setNewIcon()
            document.title = cnt + " New " + pagetitle;
        } else {
            setStdIcon();
            document.title = pagetitle;
			allMessagesElement.html('Мои Сообщения');
        }
        cntold = cnt;
        var random_num = (Math.round((Math.random() * 9000) + 1000))
        setTimeout(function(){
            VKRefresh();
        }, reload + random_num);
    }, 'JSON');
}

VKRefresh();