forked from k0b4y4sh1/js-popunder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
popup.js
123 lines (123 loc) · 3.22 KB
/
popup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* @author Phan Thanh Cong <chiplove.9xpro at gmail dot com>
* @since June 14, 2012
* @version 1.2
* @since Jul 5, 2013 - Anti Google Chrome Blocker
*/
var Light = Light || {};
Light.Popup = {
popName: 'Chip-LightPopup',
alwaysPop: false, // refresh = new pop
onNewTab: true,
/**
* 1: window onclick,
* 2: window onload -> document onclick
*/
eventType: 1,
defaults: {
width: window.screen.width,
height: window.screen.height,
left: 0,
top: 0,
location: 1,
tollbar: 1,
status: 1,
menubar: 1,
scrollbars: 1,
resizable: 1
},
newWindowDefaults: {
width: window.screen.width - 20,
height: window.screen.height - 20
},
__newWindow: {
scrollbars: 0
},
__counter : 0,
create: function(link, options) {
var optionsOriginal = options = options || {},
me = this;
var popName = me.popName + '_' + (me.__counter++);
var keys = ['onNewTab', 'eventType', 'cookieExpires', 'alwaysPop'];
for(var i in keys) {
var key = keys[i];
if(typeof options[key] != 'undefined') {
eval('var ' + key + ' = options.' + key);
delete options[key];
} else {
eval('var ' + key + ' = me.' + key);
}
}
if(alwaysPop) {
cookieExpires = -1;
}
for(var i in me.defaults) {
if(typeof options[i] == 'undefined') {
options[i] = me.defaults[i];
if(!onNewTab && typeof me.newWindowDefaults[i] != 'undefined') {
options[i] = me.newWindowDefaults[i];
}
}
}
for(var i in me.__newWindow) {
options[i] = me.__newWindow[i];
}
var params = [];
for(var i in options) {
params.push(i + '=' + options[i]);
}
params = params.join(',');
var executed = false;
var execute = function() {
if(me.cookie(popName) === null && !executed) {
// Jul 5, 2013 - Anti Google Chrome Blocker
if(typeof window.chrome != 'undefined' && navigator.userAgent.indexOf('Windows') != -1
&& typeof ___lastPopTime != 'undefined' && ___lastPopTime+5 > new Date().getTime()) {
return;
}
executed = true;
if(onNewTab) {
var w = window.open(link, popName);
} else {
var w = window.open(link, '_blank', params);
}
w.blur();
me.cookie(popName, 1, cookieExpires);
// Jul 5, 2013 - Anti Google Chrome Blocker
___lastPopTime = new Date().getTime();
setTimeout(function(){
if(!w.innerWidth || !w.document.documentElement.clientWidth) {
me.create(link, optionsOriginal);
}
}, 100);
}
}
if(eventType == 1) {
window.addEventListener("click", execute);
} else if(eventType == 2) {
window.addEventListener("load", function(){
document.body.addEventListener("click", execute);
});
}
},
cookie: function(name, value, days) {
if(arguments.length == 1) {
var cookieMatch = document.cookie.match(new RegExp(name+"=[^;]+", "i"));
return (cookieMatch) ? decodeURIComponent(cookieMatch[0].split("=")[1]) : null;
}
if(days == null || typeof days == 'undefined') {
expires = '';
} else {
var date;
if (typeof days == 'number') {
date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
} else {
date = days;
}
expires = '; expires=' + date.toUTCString();
}
var value = escape(value) + expires + "; path=/";
document.cookie = name + "=" + value;
}
};