没有http(s)前缀的Href

Pup*_*kin 19 html href

我刚刚创建了原始的html页面.这是:示例 这里是它的标记:

<a href="www.google.com">www.google.com</a>
<br/>
<a href="http://www.google.com">http://www.google.com</a>
Run Code Online (Sandbox Code Playgroud)

如您所见,它包含两个链接.第一个人的href没有'http'前缀,当我点击此链接时,浏览器会将我重定向到不存在的页面https://fiddle.jshell.net/_display/www.google.com.第二个href有这个前缀,浏览器生成正确的url http://www.google.com/.是否可以使用hrefs,如www.something.com没有http(s)前缀?

Dav*_*vid 27

这是可能的,事实上你现在正在这样做.它只是没有做你认为它做的事情.

考虑链接到此时浏览器的作用:

href="index.html"
Run Code Online (Sandbox Code Playgroud)

当你链接到这个时它会怎么做?:

href="index.com"
Run Code Online (Sandbox Code Playgroud)

或这个?:

href="www.html"
Run Code Online (Sandbox Code Playgroud)

要么?:

href="www.index.com.html"
Run Code Online (Sandbox Code Playgroud)

浏览器不知道你的意思,它只知道你说的是什么.如果没有前缀,它将遵循当前HTTP地址的标准.前缀是告诉它需要完全从新的根地址开始.

请注意,您不需要http:部件,您可以这样做:

href="//www.google.com"
Run Code Online (Sandbox Code Playgroud)

浏览器将使用当前协议(http,https等等),但//告诉它这是一个新的根地址.

  • “浏览器将使用当前协议是什么”是什么意思。不幸的是,当我对仅针对 `http` 运行的 url 执行此操作时,它会在 `https` 中打开它,但它不起作用。有没有办法解决这个问题? (2认同)

ssc*_*ep3 16

您可以通过//在路径前使用来省略协议.这是一个例子:

<a href="//www.google.com">Google</a>
Run Code Online (Sandbox Code Playgroud)

通过使用//,您可以告诉浏览器这实际上是一个新的(完整)链接,而不是相对的链接(相对于您当前的链接).

  • 此外,如果您的网站在https上运行,则链接也将为https,如果您的网站在http上运行,则链接将为http。 (3认同)

Che*_*mah 15

我在 React 项目中创建了一个可以帮助你的小函数:

const getClickableLink = link => {
    return link.startsWith("http://") || link.startsWith("https://") ?
      link
      : `http://${link}`;
  };
Run Code Online (Sandbox Code Playgroud)

你可以这样实现它:

const link = "google.com";
<a href={getClickableLink(link)}>{link}</a>
Run Code Online (Sandbox Code Playgroud)