return;
}
- this.callbacks_[id](msg);
+ var f = this.callbacks_[id];
+ setTimeout(function() {
+ try {
+ f(msg);
+ } catch (e) {
+ console.error('########## exception');
+ console.error(e);
+ }
+ }, 0);
delete this.callbacks_[id];
return;
return;
}
- this.listeners_[id](msg);
+ var f = this.listeners_[id];
+ setTimeout(function() {
+ try {
+ f(msg);
+ } catch (e) {
+ console.error('########## exception');
+ console.error(e);
+ }
+ }, 0);
return;
}
CallbackManager.prototype = {
add: function (/*callbacks, cid?*/) {
- if (debug) console.log('bridge', 'CallbackManager', 'add');
+ if (debug) console.log('bridge.CallbackManager.add');
var args = Array.prototype.slice.call(arguments);
var c = args.shift();
var cid = args.pop();
return cid;
},
remove: function (cid) {
- if (debug) console.log('bridge', 'CallbackManager', 'remove', cid);
+ if (debug) console.log('bridge.CallbackManager.remove, cid: ' + cid);
if (_collection[cid]) delete _collection[cid];
},
call: function (cid, key, args, keep) {
- if (debug) console.log('bridge', 'CallbackManager', 'call', cid, key);
+ if (debug) console.log('bridge.CallbackManager.call, cid: '+ cid + ', key: ' + key);
var callbacks = _collection[cid];
keep = !!keep;
if (callbacks) {
ListenerManager.prototype = {
add: function (l) {
- if (debug) console.log('bridge', 'ListenerManager', 'add');
+ if (debug) console.log('bridge.ListenerManager.add');
var id = _next();
_listeners[id] = l;
return id;
},
resolve: function (id, action, data, keep) {
- if (debug) console.log('bridge', 'ListenerManager', 'resolve', id, action);
+ if (debug) console.log('bridge.ListenerManager.resolve, id: ' + id + ', action: ' + action);
keep = !!keep;
var l = _listeners[id];
if (l) {
return l;
},
remove: function (id) {
- if (debug) console.log('bridge', 'ListenerManager', 'remove', id);
+ if (debug) console.log('bridge.ListenerManager.remove, id: ' + id);
var l = _listeners[id];
if (l) {
var cm = Callbacks.getInstance();
})();
var Listener = function () {
- if (debug) console.log('bridge', 'Listener constructor');
+ if (debug) console.log('bridge: Listener constructor');
this.cid = null;
};
Listener.prototype = {
then: function (c) {
- if (debug) console.log('bridge', 'Listener', 'then');
+ if (debug) console.log('bridge.Listener.then');
var cm = Callbacks.getInstance();
this.cid = cm.add(c, this.cid);
return this;
cmd: data.cmd,
args: data
});
- if (debug) console.log('bridge', 'sync', json);
+ if (debug) console.log('bridge.sync, json: ' + json);
var result = extension.internal.sendSyncMessage(json);
var obj = JSON.parse(result);
if (obj.error)
cmd: data.cmd,
args: data
});
- if (debug) console.log('bridge', 'async', json);
+ if (debug) console.log('bridge.async, json: ' + json);
setTimeout(function () {
extension.postMessage(json);
});
*}
*/
- if (debug) console.log('bridge', 'setMessageListener', json);
+ if (debug) console.log('bridge.setMessageListener, json: ' + json);
var data = JSON.parse(json);
if (data.cid && data.action) {
- Listeners.getInstance().resolve(data.cid, data.action, data.args, data.keep);
+ setTimeout(function() {
+ Listeners.getInstance().resolve(data.cid, data.action, data.args, data.keep);
+ }, 0);
}
});