diff --git a/src/LiveDevelopment/LiveDevMultiBrowser.js b/src/LiveDevelopment/LiveDevMultiBrowser.js index 01fac227f39..9638319b74e 100644 --- a/src/LiveDevelopment/LiveDevMultiBrowser.js +++ b/src/LiveDevelopment/LiveDevMultiBrowser.js @@ -87,7 +87,7 @@ define(function (require, exports, module) { LiveDevServerManager = require("LiveDevelopment/LiveDevServerManager"), NodeSocketTransport = require("LiveDevelopment/MultiBrowserImpl/transports/NodeSocketTransport"), LiveDevProtocol = require("LiveDevelopment/MultiBrowserImpl/protocol/LiveDevProtocol"), - Launcher = require("LiveDevelopment/MultiBrowserImpl/launchers/Launcher"); + DefaultLauncher = require("LiveDevelopment/MultiBrowserImpl/launchers/Launcher"); // Documents var LiveCSSDocument = require("LiveDevelopment/MultiBrowserImpl/documents/LiveCSSDocument"), @@ -113,6 +113,12 @@ define(function (require, exports, module) { * Protocol handler that provides the actual live development API on top of the current transport. */ var _protocol = LiveDevProtocol; + + /** + * @private + * Current browser launcher for preview. + */ + var _launcher; /** * @private @@ -525,7 +531,7 @@ define(function (require, exports, module) { // open default browser // TODO: fail? // - Launcher.launch(url); + _launcher.launch(url); } /** @@ -799,6 +805,23 @@ define(function (require, exports, module) { _protocol.setTransport(transport); } + /** + * Sets the current browser launcher mechanism to be used by live development + * (e.g., default browser, iframe-based browser, etc.) + * The launcher must provide the following method: + * + * - launch(url): Launch the given URL in the appropriate browser. + * + * @param {{launch: function(string)}} launcher + */ + function setLauncher(launcher) { + if (!(launcher && launcher.launch)) { + console.log("Invalid launcher object: ", launcher, new Error("LiveDevMultiBrowser.setLauncher()")); + return; + } + _launcher = launcher; + } + /** * Initialize the LiveDevelopment module. */ @@ -814,6 +837,9 @@ define(function (require, exports, module) { // Default transport for live connection messages - can be changed setTransport(NodeSocketTransport); + // Default launcher for preview browser - can be changed + setLauncher(DefaultLauncher); + // Initialize exports.status _setStatus(STATUS_INACTIVE); } @@ -918,4 +944,5 @@ define(function (require, exports, module) { exports.getServerBaseUrl = getServerBaseUrl; exports.getCurrentProjectServerConfig = getCurrentProjectServerConfig; exports.setTransport = setTransport; + exports.setLauncher = setLauncher; });