diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 5742042370..46d38f0fca 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -609,15 +609,30 @@ OpenLayers.Util.getArgs = function(url) { if(url == null) { url = window.location.href; } - var query = (url.indexOf('?') != -1) ? url.substring(url.indexOf('?') + 1) - : ''; + + var start = url.indexOf('?'); + var stop = url.indexOf('#'); + + if (start != -1) { + if (stop != -1) { + var query = url.substring(start + 1, stop); + } else { + var query = url.substring(start + 1); + } + } else { + return {}; + } + var args = new Object(); pairs = query.split(/[&;]/); for(var i = 0; i < pairs.length; ++i) { - keyValue = pairs[i].split(/=/); - if(keyValue.length == 2) { - args[decodeURIComponent(keyValue[0])] = - decodeURIComponent(keyValue[1]); + keyValue = pairs[i].split('='); + if (keyValue[0]) { + if (keyValue[1]) { + args[decodeURIComponent(keyValue[0])] = decodeURIComponent(keyValue[1]); + } else { + args[decodeURIComponent(keyValue[0])] = ''; + } } } return args; diff --git a/tests/test_Util.html b/tests/test_Util.html index 756713f9e1..24bf3205eb 100644 --- a/tests/test_Util.html +++ b/tests/test_Util.html @@ -571,6 +571,17 @@ t.eq(OpenLayers.Util.createDiv().id, "OpenLayersDiv3", "Div created is sequential, starting at lastSeqID in Util."); } + function test_Util_getArgs(t) { + t.plan(5); + t.eq(OpenLayers.Util.getArgs('http://www.example.com'), {}, "getArgs works when args = ''"); + t.eq(OpenLayers.Util.getArgs('http://www.example.com?'), {}, "getArgs works when args = '?'"); + t.eq(OpenLayers.Util.getArgs('http://www.example.com?hello=world&foo=bar'), + {'hello' : 'world', 'foo': 'bar'}, "getArgs works when args = '?hello=world&foo=bar'"); + t.eq(OpenLayers.Util.getArgs('http://www.example.com?hello=&foo=bar'), + {'hello' : '', 'foo': 'bar'}, "getArgs works when args = '?hello=&foo=bar'"); + t.eq(OpenLayers.Util.getArgs('http://www.example.com?foo=bar#bugssucks'), + {'foo': 'bar'}, "getArgs works when using a fragment identifier"); + } // -->