Modules (180)

RemoteAgent

Description

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.

Dependencies

Functions

Public API

call

Call a remote function The parameters are passed on to the remote functions. Nodes are resolved and sent as objectIds.

function string
name
    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 + "(" + LiveDevelopment.config.experimental + ");";

        Inspector.Runtime.evaluate(command, function onEvaluate(response) {
            if (response.error || response.wasThrown) {
                _load.reject(response.error);
            } else {
                _objectId = response.result.objectId;
                _load.resolve();

                _startKeepAliveInterval();
            }
        });
    }
Public API

load

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();
    }
Public API

unload

Clean up

    function unload() {
        Inspector.Page.off(".RemoteAgent");
        Inspector.DOM.off(".RemoteAgent");
        _stopKeepAliveInterval();
    }


    EventDispatcher.makeEventDispatcher(exports);

    // Export public functions
    exports.call = call;
    exports.load = load;
    exports.unload = unload;
});