$window.location.origin在使用IE时给出错误的值

48

你正在使用相同的浏览器吗? - giammin
你说得对,这是一个浏览器问题。已经更新了问题。 - Ryan Langton
我不知道它在所有浏览器中的差异,但我会考虑编写一些解析URL为各种组件以保持一致性的代码。这可能会有所帮助:https://dev59.com/MXRB5IYBdhLWcg3wCjrO - Zhihao
值得一提的是,$windowwindow相同,但由Angular提供。https://docs.angularjs.org/api/ng/service/$window - Tom Robinson
2个回答

85

您可能还需要端口号。 如果是这样,您可以使用此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 而不是 hostname 和 port 有什么缺点吗?根据 https://developer.mozilla.org/en-US/docs/Web/API/Location,它应该包括这两个部分。 - Tom Robinson
在代码的最后一行使用模板字符串的alt语法: + (window.location.port ? :${window.location.port} : '');(除了单个波浪线,不是双波浪线,在注释中不确定如何实现) - MrBoJangles

32
问题(像往常一样)在于IE不支持window.location.origin,请尝试使用类似以下的方法:
var root = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');

或者你可以在你的JavaScript代码之上添加这段代码,这样你就不必再费心了。

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

使用 window.location.hostname 而不是 hostnameport 有什么缺点吗?根据 https://developer.mozilla.org/en-US/docs/Web/API/Location,应该包括这两个部分。 - Tom Robinson
1
@tjrobinson 不需要的话,你可以不用在网址中一直指定端口(http://stackoverflow.com:80)。 - giammin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接