فهرست منبع

Merge pull request #547 from pigshell/hashargs

Add hash fragment as an optional method to supply config variables.

Closes #544
Solly Ross 9 سال پیش
والد
کامیت
28646d978f
4فایلهای تغییر یافته به همراه43 افزوده شده و 16 حذف شده
  1. 2 2
      include/ui.js
  2. 23 0
      include/webutil.js
  3. 2 0
      vnc.html
  4. 16 14
      vnc_auto.html

+ 2 - 2
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);
             }

+ 23 - 0
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

+ 2 - 0
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
     -->
     <title>noVNC</title>
 

+ 16 - 14
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
     -->
     <title>noVNC</title>
 
@@ -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,