window.open()只是将URL添加到当前URL中。

47

当我使用 window.open("www.google.com", "_blank");

window.open("www.google.com", "_blank");

打开了一个新标签页,但URL不是"www.google.com",而是"=url-i-was-at=/www.google.com"。

这是代码片段(也是唯一相关的代码)。 http://jsfiddle.net/FUYTY/

在jsfiddle中它的行为有些不同,但仍然不能像应该那样工作。

我做错了什么?


2
www.google.com 将是一个本地路径,例如指向您服务器上同名的目录。如果您需要链接到外部域,您需要使用绝对 URL,例如 http://www.google.com/ - CBroe
8
不确定为什么这个问题会被如此严重地负评。它是一个合理的问题,并且有明确的解决方案。 - Alex
4个回答

50
您想访问服务器 www.google.com 的根文档,这可以使用url https://www.google.com/ 完成。 但您提供的是文档 www.google.com 的相对url。
请记住,window.open接受相对和绝对url,因此当您在地址栏中使用www.google.com时,它无法假设您遗漏了https://
也许举个例子会有所帮助。 假设当前页面为http://www.example.com/dir/foo.html
  • window.open("popup.html", "_blank")打开
    http://www.example.com/dir/popup.html
  • window.open("www.google.com", "_blank") 因此打开
    http://www.example.com/dir/www.google.com
浏览器没办法知道你实际上想要的是 https://www.google.com/ 当你说你想要的是http://www.example.com/dir/www.google.com,因为后者也可能是有效的。

1
太好了,谢谢!但是为什么包含http://就可以解决呢?HTML/JS或其他控件会查找http://,如果没有找到它会将其解释为相对URL? - user1747330
9
也许举个例子会更有帮助。 window.open 可以接受相对和绝对 URL。如果您在 http://www.example.com/dir/foo.html 页面中调用 window.open("popup.html", "_blank"),它将打开 http://www.example.com/dir/popup.html。如果您从同一页调用 window.open("www.google.com", "_blank"),则会打开 http://www.example.com/dir/www.google.com。浏览器无法知道您实际上想要的是 http://www.google.com/,而不是 http://www.example.com/dir/www.google.com - ikegami
请将我的时间节省下来,只需努力30分钟。 - Hamza Shafiq

15

您需要在您的URL前面加上http://

$(document).ready(function () {
    $('#mybtn').on('click', function () {
        window.open("http://www.google.com", '_blank');
    });
});

修复:http://jsfiddle.net/FUYTY/4/

5

尝试在之前添加http://(参见Fiddle http://jsfiddle.net/lkritchey/FUYTY/3/

$( document ).ready(function() {
  $('#mybtn').on('click', function() {
      window.open("http://www.google.com", '_blank');   
  });
});

更多信息: 如果你在字符串前面包含'/',它就会将你的字符串附加到根URL上。如果你仅列出字符串,它就会将其附加到当前完整的URL上。如果你包含http://或https://,它就知道只使用你放入字符串中的内容(例如:http://www.google.com)。


4

请在您的URL前加上http://


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