phantom-socketio
Version:
This simple library provides the ability to use socket.io-client library inside phantomjs.
72 lines (66 loc) • 2 kB
JavaScript
(function () {
var fs = require('fs');
var page;
var initialized;
var onListeners = {};
exports.initialize = function (indexJsDirectory, url, callback) {
page = require('webpage').create();
page.open(indexJsDirectory + fs.separator + 'index.html', function (status) {
var opened = status === 'success';
if (opened) {
webpageInitialize(url);
initialized = true;
callback();
}
});
};
exports.on = function (name, callback) {
checkInitialized();
addOnListener(name, callback);
page.evaluate(function (name) {
window.socket.on(name, function (data) {
if (typeof window.callPhantom === 'function') {
window.callPhantom({
name: name,
data: data
});
}
});
}, name);
};
exports.emit = function (name, message) {
checkInitialized();
page.evaluate(function (name, message) {
window.socket.emit(name, message)
}, name, message);
};
function webpageInitialize(url) {
page.evaluate(function (url) {
window.socket = window.io(url);
}, url);
page.onCallback = function (data) {
if (data) {
fireOnEvent(data.name, data.data);
}
};
}
function checkInitialized() {
if (!initialized) {
throw new Error("phantom-socket is not initialized!");
}
}
function addOnListener(name, listener) {
if (!onListeners[name]) {
onListeners[name] = [];
}
onListeners[name].push(listener);
}
function fireOnEvent(name, data) {
if (!onListeners[name]) {
return;
}
onListeners[name].forEach(function (listener) {
listener(data);
});
}
})();