如何使用当前页面中的javascript获取主机URL

kar*_*k k 171 javascript

鉴于我在以下页面:

http://www.webmail.com/pages/home.aspx
Run Code Online (Sandbox Code Playgroud)

如何"http://www.webmail.com"使用JavaScript 检索主机名()?

Eri*_*itz 297

var host = window.location.hostname;
Run Code Online (Sandbox Code Playgroud)

或者可能

var host = "http://"+window.location.hostname;
Run Code Online (Sandbox Code Playgroud)

或者如果你喜欢连接

var protocol = location.protocol;
var slashes = protocol.concat("//");
var host = slashes.concat(window.location.hostname);
Run Code Online (Sandbox Code Playgroud)

  • 使用window.location.host而不是hostname,如果端口不是80,则会失败. (30认同)
  • 也许不要指定`http`.使用相关协议.可能比硬编码更合适. (3认同)
  • `hostname`只给域名,`host`也会提供端口.这是一个很棒的迷你工具,可以看到链接解剖http://bl.ocks.org/abernier/3070589 (3认同)
  • window.location.origin也可以很好地工作-它包括协议和端口。 (2认同)

Que*_*tin 92

要获取主机名: location.hostname

但是你的例子也在寻找这个方案,所以location.origin看起来在Chrome中做了你想做的事情,但在Mozdev文档中没有提到.你可以用它来构建它

location.protocol + '//' + location.hostname
Run Code Online (Sandbox Code Playgroud)

如果你想要端口号(当它不是80时),那么:

location.protocol + '//' + location.host
Run Code Online (Sandbox Code Playgroud)


Mon*_*nso 58

您可以使用以下命令获取协议,主机和端口:

window.location.origin
Run Code Online (Sandbox Code Playgroud)

浏览器兼容性

桌面

| Chrome                           | Edge  | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit)                            |
|----------------------------------|-------|-----------------|-------------------|-------|--------------------------------------------|
| (Yes)                            | (Yes) | (Yes)           | (Yes)             | (Yes) | (Yes)                                      |
| 30.0.1599.101 (possibly earlier) | ?     | 21.0 (21.0)     | 11                | ?     | 7 (possibly earlier, see webkit bug 46558) |
Run Code Online (Sandbox Code Playgroud)

移动

| Android                          | Edge  | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile                              |
|----------------------------------|-------|------------------------|----------|--------------|--------------------------------------------|
| (Yes)                            | (Yes) | (Yes)                  | (Yes)    | (Yes)        | (Yes)                                      |
| 30.0.1599.101 (possibly earlier) | ?     | 21.0 (21.0)            | ?        | ?            | 7 (possibly earlier, see webkit bug 46558) |
Run Code Online (Sandbox Code Playgroud)

所有浏览器兼容性均来自Mozilla Developer Network

  • 我应该提到IE不支持这个. (4认同)

小智 7

你可以尝试这样的事情:

1. Get the full URL:

     window.location

2. Get the only protocol:

    window.location.protocol

3. Get the host (without port):

    window.location.hostname

4. Get the host + port:

    window.location.host

5. Get the host and protocol:

    window.location.origin

6. Get pathname or directory without protocol and host:

    var url = 'http://www.example.com/somepath/path2/path3/path4';
    
    var pathname = new URL(url).pathname;
    
    alert(pathname); 
Run Code Online (Sandbox Code Playgroud)


Gor*_*dyD 6

这应该工作:

window.location.hostname
Run Code Online (Sandbox Code Playgroud)


use*_*578 6

let path = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port;
Run Code Online (Sandbox Code Playgroud)


Mah*_*ber 5

根据您的需要,您可以使用其中一个window.location属性。在您的问题中,您询问的是host,可以使用window.location.hostname(例如www.example.com)检索它。在你的例子中,你展示了一些叫做origin 的东西,它可以使用window.location.origin(例如http://www.example.com)检索。

var path = window.location.origin + "/";

//result = "http://localhost:60470/"
Run Code Online (Sandbox Code Playgroud)


Bal*_*aji 5

使用前请记住窗口位置

1.在客户端渲染中使用窗口和位置(注意:不要在ssr中使用)

window.location.host; 
Run Code Online (Sandbox Code Playgroud)

或者

var host = window.location.protocol + "//" + window.location.host;
Run Code Online (Sandbox Code Playgroud)

2.服务端渲染

如果您使用 nuxt.js(vue) 或 next.js(react) 请参阅文档

对于 nuxt js 框架

req.headers.host
Run Code Online (Sandbox Code Playgroud)

代码:

async asyncData ({ req, res }) {
        if (process.server) {
         return { host: req.headers.host }
        }
Run Code Online (Sandbox Code Playgroud)

路由器中的代码:

export function createRouter (ssrContext) {



console.log(ssrContext.req.headers.host)   
      return new Router({
        middleware: 'route',
        routes:checkRoute(ssrContext),
        mode: 'history'
      })
    }
Run Code Online (Sandbox Code Playgroud)

对于next.js框架

Home.getInitalProps = async(context) => {
   const { req, query, res, asPath, pathname } = context;
   if (req) {
      let host = req.headers.host // will give you localhost:3000
     }
  }
Run Code Online (Sandbox Code Playgroud)

对于 Node.js 用户

var os = require("os");
var hostname = os.hostname();
Run Code Online (Sandbox Code Playgroud)

或者

request.headers.host
Run Code Online (Sandbox Code Playgroud)

对于 Laravel 用户

public function yourControllerFun(Request $request) {

    $host = $request->getHttpHost();

  

    dd($host);

}
Run Code Online (Sandbox Code Playgroud)

或者

直接在web.php中使用

Request::getHost();
Run Code Online (Sandbox Code Playgroud)

笔记 :

csr 和 ssr 应用程序都需要手动检查示例 ssr 渲染

if(req.server){
host=req.host;
}
if(req.client){
host=window.location.host; 
}
Run Code Online (Sandbox Code Playgroud)