First commit
This commit is contained in:
73
hGameTest/node_modules/sockjs-client/lib/utils/event.js
generated
vendored
Normal file
73
hGameTest/node_modules/sockjs-client/lib/utils/event.js
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
'use strict';
|
||||
|
||||
var random = require('./random');
|
||||
|
||||
var onUnload = {}
|
||||
, afterUnload = false
|
||||
// detect google chrome packaged apps because they don't allow the 'unload' event
|
||||
, isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime
|
||||
;
|
||||
|
||||
module.exports = {
|
||||
attachEvent: function(event, listener) {
|
||||
if (typeof global.addEventListener !== 'undefined') {
|
||||
global.addEventListener(event, listener, false);
|
||||
} else if (global.document && global.attachEvent) {
|
||||
// IE quirks.
|
||||
// According to: http://stevesouders.com/misc/test-postmessage.php
|
||||
// the message gets delivered only to 'document', not 'window'.
|
||||
global.document.attachEvent('on' + event, listener);
|
||||
// I get 'window' for ie8.
|
||||
global.attachEvent('on' + event, listener);
|
||||
}
|
||||
}
|
||||
|
||||
, detachEvent: function(event, listener) {
|
||||
if (typeof global.addEventListener !== 'undefined') {
|
||||
global.removeEventListener(event, listener, false);
|
||||
} else if (global.document && global.detachEvent) {
|
||||
global.document.detachEvent('on' + event, listener);
|
||||
global.detachEvent('on' + event, listener);
|
||||
}
|
||||
}
|
||||
|
||||
, unloadAdd: function(listener) {
|
||||
if (isChromePackagedApp) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var ref = random.string(8);
|
||||
onUnload[ref] = listener;
|
||||
if (afterUnload) {
|
||||
setTimeout(this.triggerUnloadCallbacks, 0);
|
||||
}
|
||||
return ref;
|
||||
}
|
||||
|
||||
, unloadDel: function(ref) {
|
||||
if (ref in onUnload) {
|
||||
delete onUnload[ref];
|
||||
}
|
||||
}
|
||||
|
||||
, triggerUnloadCallbacks: function() {
|
||||
for (var ref in onUnload) {
|
||||
onUnload[ref]();
|
||||
delete onUnload[ref];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var unloadTriggered = function() {
|
||||
if (afterUnload) {
|
||||
return;
|
||||
}
|
||||
afterUnload = true;
|
||||
module.exports.triggerUnloadCallbacks();
|
||||
};
|
||||
|
||||
// 'unload' alone is not reliable in opera within an iframe, but we
|
||||
// can't use `beforeunload` as IE fires it on javascript: links.
|
||||
if (!isChromePackagedApp) {
|
||||
module.exports.attachEvent('unload', unloadTriggered);
|
||||
}
|
||||
Reference in New Issue
Block a user