Ad Slicer for MySpace

By Adrian Last update Oct 9, 2008 — Installed 55,039 times.

There are 5 previous versions of this script.

// ==UserScript==
// @name          Ad Slicer for MySpace
// @namespace     Adrian232
// @description   Removes all the ads, and the space they leave behind.
// @source        http://userscripts.org/scripts/show/3890
// @identifier    http://userscripts.org/scripts/source/3890.user.js
// @creator       Adrian (myspace.com/adrian232)
// @version       1.1.3
// @date          2008-10-9
// @include       http://myspace.com/*
// @include       http://*.myspace.com/*
// @exclude       http://*myspace.com/
// @exclude       http://*myspace.com/index.cfm?fuseaction=splash*
// @exclude       http://del.B.myspace.com/*
// @exclude       http://deSK.myspace.com/*
// ==/UserScript==
// Created by Adrian: http://www.myspace.com/adrian232
// WARNING: Before you even THINK about changing the line(s) above and reposting this
// script as your own, remember that I have put a lot of hard work into this script and
// do not appreciate it getting stolen by amateur script writers!
// If you have something to add to this script, contact me on MySpace about it. If it's
// worthy of putting it in the next release, I will credit you.
// DO NOT UNDER ANY CIRCUMSTANCES RE-POST THIS SCRIPT WITHOUT CONTACTING ME FIRST!

/***********************\
|* User Script Updates *|
\***********************/
// http://userscripts.org/scripts/show/2296
var ScriptData =  {
	name: "Ad Slicer for MySpace",
	namespace: "Adrian232",
	description: "Removes all the ads, and the space they leave behind.",
	
	source: "http://userscripts.org/scripts/show/3890",
	identifier: "http://userscripts.org/scripts/source/3890.user.js",
	
	version: "1.1.3",
	date: Date.parse("October 9, 2008")
};
var UpdateChecking = false;
window.addEventListener("load", function(e) {
	try {
		unsafeWindow.UserScriptUpdates.requestAutomaticUpdates(ScriptData);
		UpdateChecking = true;
	} catch(e) {
		UpdateChecking = false;
		GM_log("User Script Updates is not installed. To receive notices of new updates, visit http://userscripts.org/scripts/show/2296");
	}
}, false);

(function() {
	// define these here for use later
	var frames = document.getElementsByTagName('iframe');
	var scripts = document.getElementsByTagName('script');
	var images = document.getElementsByTagName('img');
	var tables = document.getElementsByTagName('table');
	var divs = document.getElementsByTagName('div');
	
	/*
	var srch = document.getElementById('srch');
	var header = document.getElementById('header');
	var topnav = document.getElementById('topnav');
	*/
	
	var modify = null; // reusable object

	// first, extract them from the new "Home" page
	destroy(document.getElementById('squareAd'));
	destroyParent(document.getElementById('marketingcontent'));
	destroy(document.getElementById('advert'));
	destroy(document.getElementById('ad-wrap'));
	destroy(document.getElementById('leaderboardRegion'));
	destroy(document.getElementById('tkn_leaderboard'));
	destroy(document.getElementById('tkn_leaderboardDiv'));
	destroy(document.getElementById('ctl00_Main_ctl00_InfoBar1_pnlAdSpot'));
	destroy(document.getElementById('googleads'));
	destroy(document.getElementById('googlead'));
	destroy(document.getElementById('googleadtest'));
	destroy(document.getElementById('rightlinks'));
	/* // These are handled below
	destroy(document.getElementById('ctl00_Main_ctl00_CMS_ProfileHome_gads'));
	destroy(document.getElementById('ctl00_Main_ctl00_CMS_ProfileHome_Gads_A'));
	destroy(document.getElementById('ctl00_Main_ctl00_CMS_ProfileHome_Gads'));
	destroy(document.getElementById('ctl00_Main_ctl00_ProfileHome_gads'));
	*/

	// loop thru all SCRIPT tags that load ads
	for (var y = 0; y < scripts.length; y++) {
		var t = scripts[y];
		
		var n = scripts[y].nextSibling;
		// skip over text nodes
		//for (n = scripts[y].nextSibling; n && n.nodeName == "#text"; n = n.nextSibling);
		
		//t.className = "1";	// debug
		/* There are 2 kinds of scripts MySpace uses:
		 * 1) <script src="blahblah.js"></script> (this one has src defined)
		 * 2) <script> some.javascript.here(); </script> (this one doesn't)
		 *
		 * And then there are Google ads:
		 * 3) <script src="http://pagead[0-9].googlesyndication.com/..."></script>
		 */
		// ignore any of type 2 that don't contain the oas_ad() function
		if (!t.src && !t.text.match(/(?:oas_ad|sdc_wrapper)\(/))
			continue;
		//t.className = "2";	// debug
		// ignore all valid myspace scripts
		if (t.src.match(/x\.myspace\.com/) ||
			t.src.match(/x\.myspacecdn\.com/) ||
			t.src.match(/cache\.static\.userplane\.com/) || // chat script
			t.src.match(/\/WebResource.axd/)
			)
			continue;
		//t.className = "3";	// debug
		// if the next sibling is a script, then stop here
		if (!n || n.nodeName == "SCRIPT")
			continue;
		//t.className = "4";	// debug
		// destroy the next sibling
		destroy(n);
		destroyParent(t);
		//t.className = "5";	// debug
	}
	
	// dirty id's
	for (var y = 0; y < divs.length; y++) {
		if (!divs[y].id) continue;
		if (divs[y].id.match(/_[gG]ads/) || divs[y].id.match(/ad-wrap/))
			destroy(divs[y]);
		if (divs[y].id.match(/ad-hdr/) ||
			(divs[y].firstChild && divs[y].firstChild.nodeType == Node.TEXT_NODE && divs[y].firstChild.nodeValue == "Sponsored Links"))
			destroyParent(divs[y]);
	}
	
	// the "advertisement" image is a dead giveaway
	for (var y = 0; y < images.length; y++) {
		if (images[y].src.match(/advertisement/)) {
			destroyParent(images[y]);
			destroy(images[y]);
		}
	}
	
	// destroy all frames, JIC
	for (var y = 0; y < frames.length; y++)
		destroy(frames[y]);
	
	// un-hide special nodes
	for (y = 0; y < tables.length; y++) {
		var t = tables[y];
		if (t.className == "sidenav") {	// for the side navbar in mail
			for (var p = t.parentNode; p; p = p.parentNode) {
				if (p.nodeName == "TABLE") {
					unhide(p);
					unhide(p.parentNode);
					if (p.previousSibling) // the blank table before it, too
						unhide(p.previousSibling.previousSibling);
					break;
				}
			}
		}
	}
		
	// destroy the parent node
	function destroyParent(node) {
		if (!node) return;
		var p = node.parentNode;
		if (p&& p.id != "content" && // exclusions JIC
				p.id != "contentWrap" &&
				p.id != "container" &&
				p.id != "SplashContentWrap" &&
				p.id != "splash_profile" &&
				p.id != "photo_wrap" &&
				p.id != "photo_list" &&
				p.id != "photoLeft" &&
				p.id != "mainContentBlock" &&
				p.id != "ctl00_Head1" &&
				p.id != "header" &&
				p.id != "main" &&
				p.id != "mainContent" &&
				p.id != "body" &&
				p.id != "nav" &&
				p.className != "col_1" &&
				p.className != "col_2" &&
				p.className != "col_3" &&
				p.id != "bfc_LeftColumn" &&
				p.id != "rightRail" &&
				p.id != "whosOnlineDiv" &&
				p.id != "srch" &&
				p.id != "searchmain" &&
				p.id != "blog_content" &&
				p.id != "groupsnarrowleft" &&
				p.id != "books_skinny" &&
				p.id != "headControls" &&
				!(isPage("home") && (p.id == "col1" || p.id == "col2" || p.id == "col3")) &&
				p.id != "aspnetForm" && // form for picture comments
				p.nodeName != "BODY" && // don't destroy the BODY tag
				p.parentNode && // or any child of the BODY
				p.parentNode.nodeName != "BODY" &&
				p.parentNode.nodeName.id != "body" &&
				!containsTdText(p))
			destroy(p);
	}
	
	// destroy the node and all its children
	function destroy(node) {
		if (!node) return;
		for (var y = 0; y < node.childNodes.length; y++) {
			var p = node.childNodes[y];
			if (p.style)
				p.style.setProperty('display', 'none', 'important');
		}
		if (node.style)
			node.style.setProperty('display', 'none', 'important');
		GM_log("Destroying Node: " + node.tagName + "#" + node.id + "." + node.className);
	}
	
	function unhide(node) {
		if (node && node.style) {
			if (node.nodeName == "TABLE")
				node.style.setProperty('display', 'table', 'important');
			else if (node.nodeName == "TD")
				node.style.setProperty('display', 'table-cell', 'important');
			else if (node.nodeName == "TR")
				node.style.setProperty('display', 'table-row', 'important');
			else
				node.style.setProperty('display', 'block', 'important');
		}
	}
	
	function containsTdText(node) {
		if (node) {
			cells = node.getElementsByTagName("TD");
			for (var i = 0; i < cells.length; i++)
				if (cells[i].className == "text")
					return true;
			return false;
		}
	}
	
	function isPage(name) {
		if (typeof name == "RegExp") {
			search = name;
		} else {
			if (name == "home")
				search = /fuseaction=user[^\.]*$/i;
			if (name == "videos")
				search = /^https?:\/\/vids\.myspace\.com\//i;
			if (name == "profile")
				search = /myspace\.com\/([0-9a-zA-Z]+|index\.cfm\?fuseaction=user\.viewprofile[^_]*)$/i;
		}
		if (search && document.location && document.location.href) {
			if (document.location.href.match(search))
				return true;
			return false;
		} else
			return false;
	}
})();