mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
96 lines
2.5 KiB
JavaScript
96 lines
2.5 KiB
JavaScript
/*!
|
|
* socket.io-node
|
|
* Copyright(c) 2011 LearnBoost <dev@learnboost.com>
|
|
* MIT Licensed
|
|
*/
|
|
|
|
var vm = require('vm')
|
|
, should = require('should');
|
|
|
|
/**
|
|
* Generates evn variables for the vm so we can `emulate` a browser.
|
|
* @returns {Object} evn variables
|
|
*/
|
|
|
|
exports.env = function env(){
|
|
var details = {
|
|
location:{
|
|
port: 8080
|
|
, host: 'www.example.org'
|
|
, hostname: 'www.example.org'
|
|
, href: 'http://www.example.org/example/'
|
|
, pathname: '/example/'
|
|
, protocol: 'http:'
|
|
, search: ''
|
|
, hash: ''
|
|
},
|
|
console: {
|
|
log: function(){},
|
|
info: function(){},
|
|
warn: function(){},
|
|
error: function(){}
|
|
},
|
|
navigator: {
|
|
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.716.0 Safari/534.27',
|
|
appName: 'socket.io',
|
|
platform: process.platform,
|
|
appVersion: process.version
|
|
},
|
|
name: 'socket.io',
|
|
innerWidth: 1024,
|
|
innerHeight: 768,
|
|
length: 1,
|
|
outerWidth: 1024,
|
|
outerHeight: 768,
|
|
pageXOffset: 0,
|
|
pageYOffset: 0,
|
|
screenX: 0,
|
|
screenY: 0,
|
|
screenLeft: 0,
|
|
screenTop: 0,
|
|
scrollX: 0,
|
|
scrollY: 0,
|
|
scrollTop: 0,
|
|
scrollLeft: 0,
|
|
screen : {
|
|
width : 0,
|
|
height : 0
|
|
}
|
|
};
|
|
// circular references
|
|
details.window = details.self = details.contentWindow = details;
|
|
|
|
// callable methods
|
|
details.Image = details.scrollTo = details.scrollBy = details.scroll = details.resizeTo =
|
|
details.resizeBy = details.prompt = details.print = details.open = details.moveTo = details.moveBy =
|
|
details.focus = details.createPopup = details.confirm = details.close = details.blur = details.alert =
|
|
details.clearTimeout = details.clearInterval = details.setInterval = details.setTimeout =
|
|
details.XMLHttpRequest = details.getComputedStyle = details.trigger = details.dispatchEvent =
|
|
details.removeEventListener = details.addEventListener = function(){};
|
|
|
|
// frames
|
|
details.frames = [details];
|
|
|
|
// document
|
|
details.document = details;
|
|
details.document.domain = details.location.href;
|
|
return details;
|
|
};
|
|
|
|
/**
|
|
* Executes a script in a browser like env and returns
|
|
* the result
|
|
*
|
|
* @param {String} contents The script content
|
|
* @returns {Object} The evaluated script.
|
|
*/
|
|
|
|
exports.execute = function execute(contents){
|
|
var env = exports.env()
|
|
, script = vm.createScript(contents);
|
|
|
|
// run the script with `browser like` globals
|
|
script.runInNewContext(env);
|
|
|
|
return env;
|
|
}; |