@@ -10,6 +10,12 @@ var urlParsingNode = window.document.createElement('a');
10
10
var originUrl = urlResolve ( window . location . href ) ;
11
11
var baseUrlParsingNode ;
12
12
13
+ urlParsingNode . href = 'http://[::1]' ;
14
+
15
+ // Support: IE 9-11 only, Edge 16-17 only (fixed in 18 Preview)
16
+ // IE/Edge don't wrap IPv6 addresses' hostnames in square brackets
17
+ // when parsed out of an anchor element.
18
+ var ipv6InBrackets = urlParsingNode . hostname === '[::1]' ;
13
19
14
20
/**
15
21
*
@@ -72,13 +78,19 @@ function urlResolve(url) {
72
78
73
79
urlParsingNode . setAttribute ( 'href' , href ) ;
74
80
81
+ var hostname = urlParsingNode . hostname ;
82
+
83
+ if ( ! ipv6InBrackets && hostname . indexOf ( ':' ) > - 1 ) {
84
+ hostname = '[' + hostname + ']' ;
85
+ }
86
+
75
87
return {
76
88
href : urlParsingNode . href ,
77
89
protocol : urlParsingNode . protocol ? urlParsingNode . protocol . replace ( / : $ / , '' ) : '' ,
78
90
host : urlParsingNode . host ,
79
91
search : urlParsingNode . search ? urlParsingNode . search . replace ( / ^ \? / , '' ) : '' ,
80
92
hash : urlParsingNode . hash ? urlParsingNode . hash . replace ( / ^ # / , '' ) : '' ,
81
- hostname : urlParsingNode . hostname ,
93
+ hostname : hostname ,
82
94
port : urlParsingNode . port ,
83
95
pathname : ( urlParsingNode . pathname . charAt ( 0 ) === '/' )
84
96
? urlParsingNode . pathname
0 commit comments