diff --git a/include/ui.js b/include/ui.js index cb5717cb..38fbe4bd 100644 --- a/include/ui.js +++ b/include/ui.js @@ -97,7 +97,7 @@ var UI; UI.initSetting('path', 'websockify'); UI.initSetting('repeaterID', ''); - var autoconnect = WebUtil.getQueryVar('autoconnect', false); + var autoconnect = WebUtil.getConfigVar('autoconnect', false); if (autoconnect === 'true' || autoconnect == '1') { autoconnect = true; UI.connect(); @@ -355,7 +355,7 @@ var UI; // Initial page load read/initialization of settings initSetting: function(name, defVal) { // Check Query string followed by cookie - var val = WebUtil.getQueryVar(name); + var val = WebUtil.getConfigVar(name); if (val === null) { val = WebUtil.readSetting(name, defVal); } diff --git a/include/webutil.js b/include/webutil.js index e674bf94..f10aa0d7 100644 --- a/include/webutil.js +++ b/include/webutil.js @@ -90,6 +90,29 @@ WebUtil.getQueryVar = function (name, defVal) { } }; +// Read a hash fragment variable +WebUtil.getHashVar = function (name, defVal) { + "use strict"; + var re = new RegExp('.*[&#]' + name + '=([^&]*)'), + match = document.location.hash.match(re); + if (typeof defVal === 'undefined') { defVal = null; } + if (match) { + return decodeURIComponent(match[1]); + } else { + return defVal; + } +}; + +// Read a variable from the fragment or the query string +// Fragment takes precedence +WebUtil.getConfigVar = function (name, defVal) { + "use strict"; + var val = WebUtil.getHashVar(name); + if (val === null) { + val = WebUtil.getQueryVar(name, defVal); + } + return val; +}; /* * Cookie handling. Dervied from: http://www.quirksmode.org/js/cookies.html diff --git a/vnc.html b/vnc.html index 1a293d09..e2250f5d 100644 --- a/vnc.html +++ b/vnc.html @@ -11,6 +11,8 @@ Connect parameters are provided in query string: http://example.com/?host=HOST&port=PORT&encrypt=1&true_color=1 + or the fragment: + http://example.com/#host=HOST&port=PORT&encrypt=1&true_color=1 --> noVNC diff --git a/vnc_auto.html b/vnc_auto.html index 86cfde75..04803223 100644 --- a/vnc_auto.html +++ b/vnc_auto.html @@ -11,6 +11,8 @@ Connect parameters are provided in query string: http://example.com/?host=HOST&port=PORT&encrypt=1&true_color=1 + or the fragment: + http://example.com/#host=HOST&port=PORT&encrypt=1&true_color=1 --> noVNC @@ -84,7 +86,7 @@ function UIresize() { - if (WebUtil.getQueryVar('resize', false)) { + if (WebUtil.getConfigVar('resize', false)) { var innerW = window.innerWidth; var innerH = window.innerHeight; var controlbarH = $D('noVNC_status_bar').offsetHeight; @@ -183,11 +185,11 @@ $D('xvpRebootButton').onclick = xvpReboot; $D('xvpResetButton').onclick = xvpReset; - WebUtil.init_logging(WebUtil.getQueryVar('logging', 'warn')); - document.title = unescape(WebUtil.getQueryVar('title', 'noVNC')); + WebUtil.init_logging(WebUtil.getConfigVar('logging', 'warn')); + document.title = unescape(WebUtil.getConfigVar('title', 'noVNC')); // By default, use the host and port of server that served this file - host = WebUtil.getQueryVar('host', window.location.hostname); - port = WebUtil.getQueryVar('port', window.location.port); + host = WebUtil.getConfigVar('host', window.location.hostname); + port = WebUtil.getConfigVar('port', window.location.port); // if port == 80 (or 443) then it won't be present and should be // set manually @@ -202,13 +204,13 @@ // If a token variable is passed in, set the parameter in a cookie. // This is used by nova-novncproxy. - token = WebUtil.getQueryVar('token', null); + token = WebUtil.getConfigVar('token', null); if (token) { WebUtil.createCookie('token', token, 1) } - password = WebUtil.getQueryVar('password', ''); - path = WebUtil.getQueryVar('path', 'websockify'); + password = WebUtil.getConfigVar('password', ''); + path = WebUtil.getConfigVar('path', 'websockify'); if ((!host) || (!port)) { updateState(null, 'fatal', null, 'Must specify host and port in URL'); @@ -217,13 +219,13 @@ try { rfb = new RFB({'target': $D('noVNC_canvas'), - 'encrypt': WebUtil.getQueryVar('encrypt', + 'encrypt': WebUtil.getConfigVar('encrypt', (window.location.protocol === "https:")), - 'repeaterID': WebUtil.getQueryVar('repeaterID', ''), - 'true_color': WebUtil.getQueryVar('true_color', true), - 'local_cursor': WebUtil.getQueryVar('cursor', true), - 'shared': WebUtil.getQueryVar('shared', true), - 'view_only': WebUtil.getQueryVar('view_only', false), + 'repeaterID': WebUtil.getConfigVar('repeaterID', ''), + 'true_color': WebUtil.getConfigVar('true_color', true), + 'local_cursor': WebUtil.getConfigVar('cursor', true), + 'shared': WebUtil.getConfigVar('shared', true), + 'view_only': WebUtil.getConfigVar('view_only', false), 'onUpdateState': updateState, 'onXvpInit': xvpInit, 'onPasswordRequired': passwordRequired,