Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Popunder working in ff 3-12, chrome 10-18, ie6-9 with cookie support
<!DOCTYPE html>
<html>
<head>
<meta content="Hans-Peter Buniat" name="author">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Form-Submit Popunder with Cookie support</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- Cookie support -->
<script type="text/javascript" src="https://cookies.googlecode.com/svn/trunk/jaaulde.cookies.js"></script>
<script type="text/javascript" src="https://cookies.googlecode.com/svn/trunk/jquery.cookies.js"></script>
</head>
<body>
<form id="testSubmit" action="http://www.google.com">
<input type="submit" />
</form>
<script type="text/javascript">
/* use jQuery as container for more convenience */
(function($) {
/**
* Create a popunder
*
* @param sUrl Url to open as popunder
* @param int block time in hours
*
* @return jQuery
*/
$.popunder = function(sUrl, blockTime) {
var bSimple = $.browser.msie,
run = function() {
$.popunderHelper.open(sUrl, blockTime, bSimple);
};
(bSimple) ? run() : window.setTimeout(run, 1);
return $;
};
/* several helper functions */
$.popunderHelper = {
/**
* Helper to create a (optionally) random value with prefix
*
* @param int blockTime block time in hours
*
* @return boolean
*/
cookieCheck: function(sUrl, blockTime) {
var name = this.rand('puCookie', false);
cookie = $.cookies.get(name),
ret = false;
if (!cookie) {
cookie = sUrl;
}
else if (cookie.indexOf(sUrl) === -1) {
cookie += sUrl;
}
else {
ret = true;
}
$.cookies.set(name, cookie, {
expiresAt: new Date((new Date()).getTime() + blockTime * 3600000)
});
return ret;
},
/**
* Helper to create a (optionally) random value with prefix
*
* @param string name
* @param boolean rand
*
* @return string
*/
rand: function(name, rand) {
var p = (name) ? name : 'pu_';
return p + (rand === false ? '' : Math.floor(89999999*Math.random()+10000000));
},
/**
* Open the popunder
*
* @param string sUrl The URL to open
* @param int blockTime block time in hours
* @param boolean bSimple Use the simple popunder
*
* @return boolean
*/
open: function(sUrl, blockTime, bSimple) {
var _parent = self,
sToolbar = (!$.browser.webkit && (!$.browser.mozilla || parseInt($.browser.version, 10) < 12)) ? 'yes' : 'no',
sOptions,
popunder;
if (blockTime && $.popunderHelper.cookieCheck(sUrl, blockTime)) {
return false;
}
if (top != self) {
try {
if (top.document.location.toString()) {
_parent = top;
}
}
catch(err) { }
}
/* popunder options */
sOptions = 'toolbar=' + sToolbar + ',scrollbars=yes,location=yes,statusbar=yes,menubar=no,resizable=1,width=' + (screen.availWidth - 10).toString();
sOptions += ',height=' + (screen.availHeight - 122).toString() + ',screenX=0,screenY=0,left=0,top=0';
/* create pop-up from parent context */
popunder = _parent.window.open(sUrl, $.popunderHelper.rand(), sOptions);
if (popunder) {
popunder.blur();
if (bSimple) {
/* classic popunder, used for ie*/
window.focus();
try { opener.window.focus(); }
catch (err) { }
}
else {
/* popunder for e.g. ff4+, chrome */
popunder.init = function(e) {
with (e) {
(function() {
if (typeof window.mozPaintCount != 'undefined') {
var x = window.open('about:blank');
x.close();
}
try { opener.window.focus(); }
catch (err) { }
})();
}
};
popunder.params = {
url: sUrl
};
popunder.init(popunder);
}
}
return true;
}
};
})(jQuery);
$('#testSubmit').submit(function() {
jQuery.popunder('http://www.fluege.de', 1).popunder('http://www.flug24.de');
});
</script>
</body>
</html>
@dranaicrag

This comment has been minimized.

Copy link

@dranaicrag dranaicrag commented Mar 28, 2013

hey man, I love this pop under script. Probably the most effective one Ive ever used. But I was wondering if this version activates only the first time the visitor triggers the script since its cookie based? Ive recently tried it and seems to load the popunder everytime. Thanks in advance for any help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment