diff --git a/src/js/lib.js b/src/js/lib.js index 90ceb55fae..47011e5528 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 2f9329dcab..58f1e19080 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);