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
|
var APE = {
Config: {
identifier: 'ape',
init: true,
frequency: 0,
scripts: []
}
};
APE.Client = new Class({
eventProxy: [],
fireEvent: function(type, args, delay){
return this.core.fireEvent(type, args, delay);
},
addEvent: function(type, fn, internal){
var newFn = fn.bind(this), ret = this;
if(!$defined(this.core)) this.eventProxy.push([type, fn, internal]);
else {
ret = this.core.addEvent(type, newFn, internal);
this.core.$originalEvents[type] = this.core.$originalEvents[type] || [];
this.core.$originalEvents[type][fn] = newFn;
}
return ret;
},
onRaw: function(type, fn, internal) {
return this.addEvent('raw_' + type.toLowerCase(), fn, internal);
},
removeEvent: function(type, fn) {
return this.core.removeEvent(type, fn);
},
onCmd: function(type, fn, internal) {
return this.addEvent('cmd_' + type.toLowerCase(), fn, internal);
},
onError: function(type, fn, internal) {
return this.addEvent('error_' + type, fn, internal);
},
load: function(config){
config = $merge({}, APE.Config, config);
// Init function called by core to init core variable
config.init = function(core){
this.core = core;
for(var i = 0; i < this.eventProxy.length; i++){
this.addEvent.apply(this, this.eventProxy[i]);
}
}.bind(this);
//set document.domain
if (config.transport != 2) {
if (config.domain != 'auto') document.domain = config.domain;
if (config.domain == 'auto') document.domain = document.domain;
}
var tmp = JSON.decode(Cookie.read('APE_Cookie'), {'domain': document.domain});
if(tmp) {
config.frequency = tmp.frequency.toInt();
} else {
tmp = {'frequency': 0};
}
tmp.frequency = config.frequency + 1;
Cookie.write('APE_Cookie', JSON.encode(tmp), {'domain': document.domain});
var iframe = new Element('iframe', {
id: 'ape_' + config.identifier,
styles: {
display: 'none',
position: 'absolute',
left: -300,
top: -300
}
}).inject(document.body);
iframe.addEvent('load', function() {
if (!iframe.contentWindow.APE) setTimeout(iframe.onload, 100);//Sometimes IE fire the onload event, but the iframe is not loaded -_-
else iframe.contentWindow.APE.init(config);
});
if (config.transport == 2) {//Special case for JSONP
var doc = iframe.contentDocument;
if (!doc) doc = iframe.contentWindow.document;
//If the content of the iframe is created in DOM, the status bar will always load...
//using document.write() is the only way to avoid status bar loading with JSONP
doc.open();
var theHtml = '<html><head>';
for (var i = 0; i < config.scripts.length; i++) {
theHtml += '<script src="' + config.scripts[i] + '"></script>';
}
theHtml += '</head><body></body></html>';
doc.write(theHtml);
doc.close();
} else {
//iframe.set('src', (config.secure ? 'https' : 'http') + '://' + config.frequency + '.' + config.server + '/?[{"cmd":"script","params":{"domain":"' + document.domain + '","scripts":["' + config.scripts.join('","') + '"]}}]');
iframe.set('src', (config.secure ? 'https' : 'http') + '://' + config.server + '/?[{"cmd":"script","params":{"domain":"' + document.domain + '","scripts":["' + config.scripts.join('","') + '"]}}]');
if (Browser.Engine.gecko) {
// Firefox fix, see bug #356558
// https://bugzilla.mozilla.org/show_bug.cgi?id=356558
iframe.contentWindow.location.href = iframe.get('src');
}
}
}
});
|