There are 245 previous versions of this script.
// ==UserScript==
// @name vkviewer
// @namespace vkviewer.ua
// @version 7.0.128
// @uso:version 7.0.128
// @description vk.com smart viewer
// @include http://*vk.com/*
// @include http://*vkontakte.ru/*
// ==/UserScript==
if ( /^http(|s):\/\/[^\/]*(vk\.com|vkontakte\.ru)/.test(self.location.href) ) {
unsafeWindow = typeof unsafeWindow == 'undefined' ? window : unsafeWindow;
if ( (unsafeWindow.top == unsafeWindow.self) && (parent.location == self.location) && // не должен выполнятся в ifram-ах
(!/(\/)(login|settings|audio|video|edit|apps|support|topface|music|away|restore|app\d+)(\.php|)(\?|#|$)/.test(self.location.href)) &&
(!/(\/)(video|photo)(\d+_\d+)(\?|$)/.test(self.location.href)) && !document.getElementById('listener') ) {
document.getElementsByTagName('html')[0].style.display = 'none';
function createHidden(id) {
var elem = document.createElement('div');
elem.setAttribute('id', id);
elem.setAttribute('display', 'none');
return elem;
}
var listener = createHidden('listener');
var sender = createHidden('sender');
var receiver = createHidden('receiver');
document.getElementsByTagName('html')[0].appendChild(listener);
listener.appendChild(sender);
listener.appendChild(receiver);
try {
if ( typeof chrome != 'undefined' && typeof chrome.extension != 'undefined' ) {
var port = chrome.extension.connect({
name : 'background'
});
new WebKitMutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
for ( var n = 0; n < mutation.addedNodes.length; n++ ) {
try {
port.postMessage(JSON.parse(mutation.addedNodes[n].textContent));
} catch ( e ) {
}
}
});
}).observe(sender, {
childList : true
});
port.onMessage.addListener(function (msgObj) {
try {
receiver.appendChild(document.createTextNode(JSON.stringify(msgObj)));
} catch ( e ) {
}
});
}
function applyScript(scriptSrc, callback) {
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
if ( callback ) {
script.addEventListener('load', callback, false);
}
if ( typeof scriptSrc == 'function' ) {
script.textContent = '(' + scriptSrc.toString() + ')();';
} else {
if ( (typeof scriptSrc == 'string') && /.js$/.test(scriptSrc) ) {
script.setAttribute('src', scriptSrc);
}
}
document.head.appendChild(script);
}
function addJQuery(callback) {
if ( unsafeWindow && (typeof unsafeWindow.jQuery == 'undefined') || (typeof jQuery == 'undefined') ) {
applyScript('http://vkviewer/vkviewer.js/libs/jQuery/jquery.min.js', function () {
applyScript(callback);
});
} else {
applyScript(callback);
}
}
var waitHead = setInterval(function () {
if ( document.getElementsByTagName('head')[0] ) {
clearInterval(waitHead);
addJQuery(function () {
jQuery.extend({ // Используем виртуальный сервер для доступа к localhost
vkViewerPath : 'http://vkviewer/vkviewer.js'
});
return $.getScript($.vkViewerPath + '/vk.joiner.js');
});
}
}, 7);
} catch ( e ) {
alert(e.stack);
}
}
}