diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 5e4bf3e7dd..d9970e0580 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -609,16 +609,27 @@ 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]); + decodeURIComponent(keyValue[1]) || ''; } } return args; diff --git a/tests/test_Util.html b/tests/test_Util.html index 907ee3e104..f5032854dc 100644 --- a/tests/test_Util.html +++ b/tests/test_Util.html @@ -570,6 +570,19 @@ OpenLayers.Util.createDiv(); 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"); + } + // -->