diff options
-rw-r--r-- | js/piwik.js | 11 | ||||
-rw-r--r-- | tests/javascript/index.php | 18 |
2 files changed, 21 insertions, 8 deletions
diff --git a/js/piwik.js b/js/piwik.js index f7286d48f6..3d5ab06472 100644 --- a/js/piwik.js +++ b/js/piwik.js @@ -752,13 +752,10 @@ if (typeof Piwik !== 'object') { * Extract parameter from URL */ function getParameter(url, name) { - // scheme : // [username [: password] @] hostame [: port] [/ [path] [? query] [# fragment]] - var e = new RegExp('^(?:https?|ftp)(?::/*(?:[^?]+)[?])([^#]+)'), - matches = e.exec(url), - f = new RegExp('(?:^|&)' + name + '=([^&]*)'), - result = matches ? f.exec(matches[1]) : 0; - - return result ? decodeWrapper(result[1]) : ''; + var regexSearch = "[\\?&#]" + name + "=([^&#]*)"; + var regex = new RegExp(regexSearch); + var results = regex.exec(url); + return results ? decodeWrapper(results[1]) : ''; } /* diff --git a/tests/javascript/index.php b/tests/javascript/index.php index 8e45f0fa94..0d6fa88b8e 100644 --- a/tests/javascript/index.php +++ b/tests/javascript/index.php @@ -436,7 +436,7 @@ function PiwikTest() { }); test("Tracker getHostName(), getParameter(), urlFixup(), domainFixup(), titleFixup() and purify()", function() { - expect(47); + expect(57); var tracker = Piwik.getTracker(); @@ -459,8 +459,24 @@ function PiwikTest() { equal( tracker.hook.test._getParameter('http://piwik.org/', 'q'), '', 'no query'); equal( tracker.hook.test._getParameter('http://piwik.org/?q=test', 'q'), 'test', '?q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?q=test#aq=not', 'q'), 'test', '?q'); equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2', 'q'), 'test2', '&q'); + + // getParameter in hash tag + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#aq=not', 'q'), 'test2', '&q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#aq=not', 'aq'), 'not', '#aq'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'bq'), 'yes', '#bq'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#pk_campaign=campaign', 'pk_campaign'), 'campaign', '#pk_campaign'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'q'), 'test2', '#q'); + + // URL decoded equal( tracker.hook.test._getParameter('http://piwik.org/?q=http%3a%2f%2flocalhost%2f%3fr%3d1%26q%3dfalse', 'q'), 'http://localhost/?r=1&q=false', 'url'); + equal( tracker.hook.test._getParameter('http://piwik.org/?q=http%3a%2f%2flocalhost%2f%3fr%3d1%26q%3dfalse¬q=not', 'q'), 'http://localhost/?r=1&q=false', 'url'); + + // non existing parameters + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'bqq'), "", '#q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'bq='), "", '#q'); + equal( tracker.hook.test._getParameter('http://piwik.org/?p=test1&q=test2#bq=yes&aq=not', 'sp='), "", '#q'); equal( typeof tracker.hook.test._urlFixup, 'function', 'urlFixup' ); |