-
-
Save Kilian/767982 to your computer and use it in GitHub Desktop.
/** | |
* Annoying.js - How to be an asshole to your users | |
* | |
* DO NOT EVER, EVER USE THIS. | |
* | |
* Copyright (c) 2011 Kilian Valkhof (kilianvalkhof.com) | |
* Visit https://gist.github.com/767982 for more information and changelogs. | |
* Visit http://kilianvalkhof.com/2011/javascript/annoying-js-how-to-be-an-asshole/ for the introduction and weblog | |
* Check out https://gist.github.com/942745 if you want to annoy developer instead of visitors | |
* | |
* Licensed under the MIT license. http://www.opensource.org/licenses/mit-license.php | |
* | |
*/ | |
/*jshint forin: false, immed: true, curly: true, eqeqeq: true, bitwise: true, noempty: true */ | |
(function(a) { | |
/** | |
* Resize the window to fullscreen (1024x768 always) | |
*/ | |
a.fullScreen = function () { | |
window.resizeTo(1024,768); | |
}; | |
/** | |
* Always keep the browser full screen | |
*/ | |
a.keepFullScreen = function () { | |
window.onresize = function() { | |
window.resizeTo(1024, 768); | |
}; | |
}; | |
/** | |
* Disable right click so users can not copy! | |
*/ | |
a.noRightClick = function () { | |
document.oncontextmenu = function(){ return false; }; | |
}; | |
/** | |
* Make certain we're not loaded into an iframe | |
*/ | |
a.onTop = function () { | |
if (parent.frames.length > 0) { top.location.replace(document.location); } | |
}; | |
/** | |
* Disable users dragging photos or text to they can't copy them | |
*/ | |
a.noDrag = function () { | |
document.ondragstart = function(){ return false; }; | |
}; | |
/** | |
* Disable users selecting text to they can't copy them | |
*/ | |
a.noSelect = function () { | |
//no text selection, in IE | |
document.onselectstart = function () { | |
if (event.srcElement.type != "text" && event.srcElement.type != "textarea" && event.srcElement.type != "password") { | |
return false; | |
} else { | |
return true; | |
} | |
}; | |
//no text selection, in Firefox | |
document.onmousedown=function(e){ | |
var obj=e.target; | |
if (obj.tagName.toUpperCase() == "INPUT" || obj.tagName.toUpperCase() == "TEXTAREA" || obj.tagName.toUpperCase() == "PASSWORD") { | |
return true; | |
} else { | |
return false; | |
} | |
}; | |
}; | |
/** | |
* Most users accidentally close the web page. Remind them of this. | |
* @param {string} msg optional message. If empty, "Please come back!!1" is displayed. | |
*/ | |
a.dontLeave = function (msg) { | |
var message = msg || "Please come back!!1"; | |
window.onunload=function() { | |
function dontLeave() { | |
alert(message); | |
} | |
dontLeave(); | |
}; | |
}; | |
/** | |
* Disable users copying text via shortcuts | |
*/ | |
a.noCopy = function () { | |
window.onkeydown = function(e) { | |
if ( e.ctrlKey ) { | |
return false; | |
} | |
}; | |
}; | |
/** | |
* Refresh the page every minute so it stays up to date | |
*/ | |
a.keepUpToDate = function(){ | |
setTimeout( | |
function(){window.location = window.location;}, | |
1000*60 | |
); | |
}; | |
/** | |
* suppress all error messages so we never have any | |
*/ | |
a.neverAnyBugs = function () { | |
window.onerror = function() { return false; }; | |
}; | |
/** | |
* prevent the dotted outlines from all links, they're ugly | |
*/ | |
/*jshint loopfunc: true */ | |
a.preventOutlines = function () { | |
for(var i in (a = document.getElementsByTagName('a'))) { | |
a[i].onmousedown = function() { | |
this.blur(); // most browsers | |
this.hideFocus = true; // ie | |
this.style.outline = 'none'; // mozilla | |
}; | |
a[i].onmouseout = a[i].onmouseup = function() { | |
this.blur(); // most browsers | |
this.hideFocus = false; // ie | |
this.style.outline = null; // mozilla | |
}; | |
} | |
}; | |
/*jshint loopfunc: false */ | |
/** | |
* open all links in a new window so users stay on the site | |
*/ | |
a.stayOnSite = function () { | |
for(var i in (a = document.getElementsByTagName('a')) ) { | |
a[i].href = "javascript:window.open('" + a[i].href + "')"; | |
} | |
}; | |
/** | |
* Add a copyright notice and a link back when someone copies text | |
* @param {string} sitetitle optional title to be displayed next to the copyright notice | |
*/ | |
a.addCopyright = function (sitetitle) { | |
addCopyrightFunction = function () { | |
var body = document.getElementsByTagName('body')[0], | |
selection = window.getSelection(), | |
copyright = sitetitle || "annoying.js", | |
pagelink = "<br />Read more at: <a href='"+document.location.href+"'>"+document.location.href+"</a><br />Copyright ©" + copyright, | |
newdiv = document.createElement('div'); | |
newdiv.style.position='absolute'; | |
newdiv.style.left='-99999px'; | |
body.appendChild(newdiv); | |
newdiv.innerHTML = selection + pagelink; | |
selection.selectAllChildren(newdiv); | |
window.setTimeout(function() { | |
body_element.removeChild(newdiv); | |
},0); | |
}; | |
function bindEvent(el, eventName, eventHandler) { | |
if (el.addEventListener){ | |
el.addEventListener(eventName, eventHandler, false); | |
} else if (el.attachEvent){ | |
el.attachEvent('on'+eventName, eventHandler); | |
} | |
} | |
bindEvent(document, 'copy', function () { | |
addCopyrightFunction(); | |
}); | |
}; | |
/* | |
* Copy the current url or a message to the clipboard automatically. Only works in IE! | |
*/ | |
a.copyToClipboard = function (msg) { | |
var text = location.href || msg; | |
if (window.clipboardData && clipboardData.setData) { | |
clipboardData.setData('text', s); | |
} | |
}; | |
/** | |
* prevent the user from using the back button | |
*/ | |
a.preventBack = function () { | |
try { | |
history.forward(); | |
setTimeout('preventBack()', 500); | |
} catch (e) {} | |
}; | |
/** | |
* Execute all the annoying.js functions | |
*/ | |
a.kitchensink = function () { | |
this.fullScreen(); | |
this.keepFullScreen(); | |
this.noRightClick(); | |
this.onTop(); | |
this.noDrag(); | |
this.noSelect(); | |
this.dontLeave(); | |
this.noCopy(); | |
this.keepUpToDate(); | |
this.neverAnyBugs(); | |
this.preventOutlines(); | |
this.stayOnSite(); | |
this.addCopyright(); //useless with the noCopy(); function! | |
this.copyToClipboard(); | |
this.preventBack(); | |
}; | |
}(Annoying)); | |
I like :) Dont forget to show a hint that this site looks best in IE6 - and to be honest I miss the -tag and moving messages in the status bar..
Won't this throw an error with Annoying being undefined?
Or did I miss part of the joke...
How about:
a.refresh = function() {
setTimeout('location.reload(true);', 2000);
};
I updated this with a bunch of new functions! Thanks for the replies/suggestions. This is still on my todo list:
- bookmark alert
- stuff floating around mouse
- move messages in the status bar
I made some fixes and jshinted the code! https://gist.github.com/998465
Thanks, I merged the changes back in! :)
doesn't work on chrome, here
Do you think that the 'a.stayOnSite = function ()' is still evil in the age of tabbed windows? Even sites like blogger give users the option of having links to pictures and other sites opened in a new window/tab...
-Jun
doesn't work...how annoying :D
What is in s
, and why do you throw away the text
value in copyToClipboard()
?
https://gist.github.com/alexmcmillan/4419e9375aec9886a919beac02bc5e9a
Opening links in a popup - it would be easier to assign target="_blank" than to create a popup ;)
A "force video autoplay" and a "recurrent pop-in" feature are missing.
Dick move.