You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2015/04/28 22:22:45 UTC

deltaspike git commit: DELTASPIKE-832 Javascript assert windowId not resilient enough

Repository: deltaspike
Updated Branches:
  refs/heads/master 4f7808b67 -> ed94665ca


DELTASPIKE-832 Javascript assert windowId not resilient enough

Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/ed94665c
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/ed94665c
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/ed94665c

Branch: refs/heads/master
Commit: ed94665cacca5b3e1bc206ba83192d8c2f372d1f
Parents: 4f7808b
Author: Thomas Andraschko <ta...@apache.org>
Authored: Tue Apr 28 22:22:24 2015 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Tue Apr 28 22:22:24 2015 +0200

----------------------------------------------------------------------
 .../resources/deltaspike/windowhandler.js       | 39 ++++++++++++--------
 1 file changed, 24 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ed94665c/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
index ccdc21a..5856340 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
+++ b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
@@ -112,15 +112,24 @@ function applyWindowId() {
     }
 }
 
-function getUrlParameter(name) {
-    var url = window.location.href;
-    var vars = url.split(/&|\?/g);
-    for (var i=0; vars != null && i < vars.length; i++) {
-        var pair = vars[i].split("=");
-        if (pair[0]==name) {
-            return pair[1];
+function getUrlParameter(uri, name) {
+    // create an anchor object with the uri and let the browser parse it
+    var a = document.createElement('a');
+    a.href = uri;
+
+    // check if a query string is available
+    var queryString = a.search;
+    if (queryString && queryString.length > 0) {
+        // create an array of query parameters - substring(1) removes the ? at the beginning of the query
+        var queryParameters = queryString.substring(1).split("&");
+        for (var i = 0; i < queryParameters.length; i++) {
+            var queryParameter = queryParameters[i].split("=");
+            if (queryParameter[0] === name) {
+                return queryParameter.length > 1 ? queryParameter[1] : "";
+            }
         }
     }
+
     return null;
 }
 function setUrlParam(baseUrl, paramName, paramValue) {
@@ -161,7 +170,7 @@ function assertWindowId() {
         }
     }
     else if (window.deltaspikeClientWindowRenderMode === 'LAZY') {
-        var dswid = getUrlParameter('dswid');
+        var dswid = getUrlParameter(window.location.href, 'dswid');
         
         // window.name is null which means that "open in new tab/window" was used
         if (!window.name || window.name.length < 1) {
@@ -170,7 +179,7 @@ function assertWindowId() {
             if (dswid) {
                 // initial redirect case
                 // the windowId is valid - we don't need to a second request
-                if (window.deltaspikeInitialRedirectWindowId && dswid == window.deltaspikeInitialRedirectWindowId) {                    
+                if (window.deltaspikeInitialRedirectWindowId && dswid === window.deltaspikeInitialRedirectWindowId) {                    
                     window.name = window.deltaspikeInitialRedirectWindowId;
                 }
                 else {
@@ -209,13 +218,13 @@ function eraseRequestCookie() {
     date.setTime(date.getTime()-(10*24*60*60*1000)); // - 10 day
     var expires = ";max-age=0;expires="+date.toGMTString();
     
-    var dsrid = getUrlParameter('dsrid'); // random request param
+    var dsrid = getUrlParameter(window.location.href, 'dsrid'); // random request param
     if (dsrid) {
         var cookieName = 'dsWindowId-' + dsrid;
         document.cookie = cookieName+"="+expires+"; path=/";
     }
 
-    var dswid = getUrlParameter('dswid');
+    var dswid = getUrlParameter(window.location.href, 'dswid');
     if (dswid) {
         var cookieName = 'dsrwid-' + dswid;
         document.cookie = cookieName+"="+expires+"; path=/";
@@ -223,14 +232,14 @@ function eraseRequestCookie() {
 }
 
 var jsfAjaxHandler = function(event) {
-    if (event.status=="success") {
+    if (event.status === "success") {
         applyWindowId();
     }
-}
+};
 
 var pfAjaxHandler = function() {
     applyWindowId();
-}
+};
 
 var oldWindowOnLoad = window.onload;
 
@@ -249,5 +258,5 @@ window.onload = function(evt) {
             }
         }
     }
-}
+};
 })();