-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathjquery.backDetect.js
80 lines (75 loc) · 2.8 KB
/
jquery.backDetect.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
/* eslint-env es5 */
/* eslint no-undef: 0 */
/* eslint no-var: 0 */
/* eslint prefer-template: 0 */
/* eslint prefer-arrow-callback: 0 */
(function backDection(jQuery) {
var $ = jQuery;
var win = typeof window !== 'undefined' && window;
var backDetectValues = {
frameLoaded: 0,
frameTry: 0,
frameTime: 0,
frameDetect: null,
frameSrc: null,
frameCallBack: null,
frameThis: null,
frameNavigator: window.navigator.userAgent,
frameDelay: 0,
frameDataSrc: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC',
};
/**
* Back Detect
*
* @param function callback
* @param int delay
*/
$.fn.backDetect = function detectBackClick(callback, delay) {
backDetectValues.frameThis = this;
backDetectValues.frameCallBack = callback;
if (delay !== null) {
backDetectValues.frameDelay = delay;
}
if (backDetectValues.frameNavigator.indexOf('MSIE ') > -1 || backDetectValues.frameNavigator.indexOf('Trident') > -1) {
setTimeout(function loadFrameIE() {
$('<iframe src="' + backDetectValues.frameDataSrc + '?loading" style="display:none;" id="backDetectFrame" onload="jQuery.fn.frameInit();""></iframe>').appendTo(backDetectValues.frameThis);
}, backDetectValues.frameDelay);
} else {
setTimeout(function loadFrame() {
$("<iframe src='about:blank?loading' style='display:none;' id='backDetectFrame' onload='jQuery.fn.frameInit();'></iframe>").appendTo(backDetectValues.frameThis);
}, backDetectValues.frameDelay);
}
};
/**
* Initialize Frame
*/
$.fn.frameInit = function initFrame() {
backDetectValues.frameDetect = document.getElementById('backDetectFrame');
if (backDetectValues.frameLoaded > 1) {
if (backDetectValues.frameLoaded === 2) {
backDetectValues.frameCallBack.call(this);
win.history.go(-1);
}
}
backDetectValues.frameLoaded += 1;
if (backDetectValues.frameLoaded === 1) {
backDetectValues.frameTime = setTimeout(function beginFrameSetup() {
jQuery.fn.setupFrames();
}, 500);
}
};
/**
* Frame Setup
*/
$.fn.setupFrames = function frameSetup() {
clearTimeout(backDetectValues.frameTime);
backDetectValues.frameSrc = backDetectValues.frameDetect.src;
if (backDetectValues.frameLoaded === 1 && backDetectValues.frameSrc.indexOf('historyLoaded') === -1) {
if (backDetectValues.frameNavigator.indexOf('MSIE ') > -1 || backDetectValues.frameNavigator.indexOf('Trident') > -1) {
backDetectValues.frameDetect.src = backDetectValues.frameDataSrc + '?historyLoaded';
} else {
backDetectValues.frameDetect.src = 'about:blank?historyLoaded';
}
}
};
}(jQuery));