From c939ab86caee13a3b931d8f1649091a99ac9a432 Mon Sep 17 00:00:00 2001 From: David LaPalomento Date: Tue, 23 Dec 2014 08:25:49 -0800 Subject: [PATCH] @dmlap fixed URL parsing in IE9. closes #1765 --- CHANGELOG.md | 1 + src/js/lib.js | 9 +++++++++ test/unit/lib.js | 32 +++++++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e26a82deb..dd586ccc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ CHANGELOG * @anhskohbo added a Vietnamese translation ([view](https://github.com/videojs/video.js/pull/1734)) * @Sxmanek added a Czech translation ([view](https://github.com/videojs/video.js/pull/1739)) * @jcaron23 added the vjs-scrubbing CSS class and prevented menus from showing while scrubbing ([view](https://github.com/videojs/video.js/pull/1741)) +* @dmlap fixed URL parsing in IE9 ([view](https://github.com/videojs/video.js/pull/1765)) -------------------- diff --git a/src/js/lib.js b/src/js/lib.js index 90ceb55fa..47011e552 100644 --- a/src/js/lib.js +++ b/src/js/lib.js @@ -692,6 +692,15 @@ vjs.parseUrl = function(url) { details[props[i]] = a[props[i]]; } + // IE9 adds the port to the host property unlike everyone else. If + // a port identifier is added for standard ports, strip it. + if (details.protocol === 'http:') { + details.host = details.host.replace(/:80$/, ''); + } + if (details.protocol === 'https:') { + details.host = details.host.replace(/:443$/, ''); + } + if (addToBody) { document.body.removeChild(div); } diff --git a/test/unit/lib.js b/test/unit/lib.js index 2f9329dca..58f1e1908 100644 --- a/test/unit/lib.js +++ b/test/unit/lib.js @@ -1,4 +1,13 @@ -module('Lib'); +var createElement; + +module('Lib', { + 'setup': function() { + createElement = document.createElement; + }, + 'teardown': function() { + document.createElement = createElement; + } +}); test('should create an element', function(){ var div = vjs.createEl(); @@ -282,6 +291,27 @@ test('should parse the details of a url correctly', function(){ equal(vjs.parseUrl('http://example.com:1234').port, '1234', 'parsed example url port'); }); +test('should strip port from hosts using http or https', function() { + var url; + + // attempts to create elements will return an anchor tag that + // misbehaves like IE9 + document.createElement = function() { + return { + hostname: 'example.com', + host: 'example.com:80', + protocol: 'http:', + port: '80', + pathname: '/domain/relative/url', + hash: '' + }; + }; + + url = videojs.parseUrl('/domain/relative/url'); + ok(!(/.*:80$/).test(url.host), ':80 is not appended to the host'); +}); + + test('vjs.findPosition should find top and left position', function() { var d = document.createElement('div'), position = vjs.findPosition(d);