diff --git a/src/ol/map.js b/src/ol/map.js
index 349a32f65b..cdd492f45a 100644
--- a/src/ol/map.js
+++ b/src/ol/map.js
@@ -947,8 +947,9 @@ ol.Map.createInteractions_ = function(mapOptions) {
* @return {Array.
} Renderer hints.
*/
ol.RendererHints.createFromQueryData = function(opt_queryData) {
- var queryData = goog.isDef(opt_queryData) ?
- opt_queryData : new goog.Uri.QueryData(goog.global.location.search);
+ var query = goog.global.location.search.substring(1),
+ queryData = goog.isDef(opt_queryData) ?
+ opt_queryData : new goog.Uri.QueryData(query);
if (queryData.containsKey('renderers')) {
return queryData.get('renderers').split(',');
} else if (queryData.containsKey('renderer')) {
diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js
index b30207e771..c23d71c237 100644
--- a/test/spec/ol/map.test.js
+++ b/test/spec/ol/map.test.js
@@ -8,6 +8,54 @@ goog.require('ol.View2D');
goog.require('ol.layer.TileLayer');
goog.require('ol.source.XYZ');
+describe('ol.RendererHints', function() {
+
+ describe('#createFromQueryData()', function() {
+
+ var savedGoogGlobal;
+
+ beforeEach(function() {
+ savedGoogGlobal = goog.global;
+ goog.global = {};
+ });
+
+ afterEach(function() {
+ goog.global = savedGoogGlobal;
+ });
+
+ it('returns defaults when no query string', function() {
+ goog.global.location = {search: ''};
+ var hints = ol.RendererHints.createFromQueryData();
+ expect(hints).toBe(ol.DEFAULT_RENDERER_HINTS);
+ });
+
+ it('returns defaults when no "renderer" or "renderers"', function() {
+ goog.global.location = {search: '?foo=bar'};
+ var hints = ol.RendererHints.createFromQueryData();
+ expect(hints).toBe(ol.DEFAULT_RENDERER_HINTS);
+ });
+
+ it('returns array of one for "renderer"', function() {
+ goog.global.location = {search: '?renderer=bogus'};
+ var hints = ol.RendererHints.createFromQueryData();
+ expect(hints).toEqual(['bogus']);
+ });
+
+ it('accepts comma delimited list for "renderers"', function() {
+ goog.global.location = {search: '?renderers=one,two'};
+ var hints = ol.RendererHints.createFromQueryData();
+ expect(hints).toEqual(['one', 'two']);
+ });
+
+ it('works with "renderer" in second position', function() {
+ goog.global.location = {search: '?foo=bar&renderer=one'};
+ var hints = ol.RendererHints.createFromQueryData();
+ expect(hints).toEqual(['one']);
+ });
+
+ });
+});
+
describe('ol.Map', function() {
describe('dispose', function() {