2014-03-21 2 views
31

$window.location.origin возвращает неправильное значение в IE.

Свойство origin возвращает протокол, имя хоста и номер порта URL-адреса.

Пример

URL: http://localhost:8080/products/search

Хром: $window.location.origin возвращается http://localhost:8080

IE: $window.location.origin возвращается http://localhost:8080/products/search

Как я могу получить правильное значение для IE?

+0

Вы используете этот браузер? – giammin

+0

Вы правы, это проблема с браузером. Обновлен вопрос. –

+0

Я не знаю, как он отличается от всех браузеров, но я хотел бы написать что-то, что анализирует URL-адрес на различные компоненты для обеспечения согласованности. Это может помочь: http://stackoverflow.com/questions/736513/how-do-i-parse-a-url-into-hostname-and-path-in-javascript – Zhihao

ответ

58

Вам также может понадобиться номер порта. Если да, то вы можете использовать этот polyfill

if (!window.location.origin) { 
    window.location.origin = window.location.protocol + "//" 
    + window.location.hostname 
    + (window.location.port ? ':' + window.location.port : ''); 
} 

Это polyfill уже является частью Modernizr.

+1

Возможно, это лучший ответ. – imns

+1

Есть ли недостатки в использовании 'window.location.hostname' вместо имени хоста и порта? Он должен включать обе части в соответствии с https://developer.mozilla.org/en-US/docs/Web/API/Location – tjrobinson

23

Проблема (как обычно) является IE, который не имеет window.location.origin

Вместо этого попробуйте использовать что-то вроде:

var root = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); 

Или вы можете добавить в верхней части JavaScript этот код, так что вы не» t об этом надо беспокоиться

if (!window.location.origin) { 
    window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); 
} 
+0

Есть ли недостатки в использовании 'window.location.hostname' вместо' hostname' и 'port'? Он должен включать обе части в соответствии с https://developer.mozilla.org/en-US/docs/Web/API/Location – tjrobinson

+1

@tjrobinson No., если вы не заботитесь о всегда указанном порту (http://stackoverflow.com : 80) – giammin

Смежные вопросы