RemoteAgent defines and provides an interface for custom remote functions
loaded from RemoteFunctions. Remote commands are executed via
call(name, varargs)
.
Remote events are dispatched as events on this object.
Call a remote function The parameters are passed on to the remote functions. Nodes are resolved and sent as objectIds.
function call(method, varargs) {
var argsArray = [_objectId, "_LD." + method];
if (arguments.length > 1) {
argsArray = argsArray.concat(Array.prototype.slice.call(arguments, 1));
}
return _call.apply(null, argsArray);
}
function _stopKeepAliveInterval() {
if (_intervalId) {
window.clearInterval(_intervalId);
_intervalId = null;
}
}
function _startKeepAliveInterval() {
_stopKeepAliveInterval();
_intervalId = window.setInterval(function () {
call("keepAlive");
}, 1000);
}
// WebInspector Event: Page.frameNavigated
function _onFrameNavigated(event, res) {
// res = {frame}
// Re-inject RemoteFunctions when navigating to a new page, but not if an iframe was loaded
if (res.frame.parentId) {
return;
}
_stopKeepAliveInterval();
// inject RemoteFunctions
var command = "window._LD=" + RemoteFunctions + "(" + JSON.stringify(LiveDevelopment.config) + "," + PreferencesManager.get("livedev.wsPort") + ");";
Inspector.Runtime.evaluate(command, function onEvaluate(response) {
if (response.error || response.wasThrown) {
_load.reject(response.error);
} else {
_objectId = response.result.objectId;
_load.resolve();
_startKeepAliveInterval();
}
});
}
Initialize the agent
function load() {
_load = new $.Deferred();
Inspector.Page.on("frameNavigated.RemoteAgent", _onFrameNavigated);
Inspector.Page.on("frameStartedLoading.RemoteAgent", _stopKeepAliveInterval);
Inspector.DOM.on("attributeModified.RemoteAgent", _onAttributeModified);
return _load.promise();
}