我想在用户点击链接时打开新标签页。该链接是用户生成的,当用户输入www.google.com等网址时,该标签无法按预期工作。这是一个显示问题的jsFiddle,这是代码:
<a href="javascript: var a = window.open('www.google.com')">open new tab</a>
我该如何解决这个问题?告诉用户输入格式正确的URL不是一种选择。
答案 0 :(得分:3)
不要忘记协议
window.open()
函数需要在请求网址时出现相应的协议(即http://
,ftp://
,https://
等),因此您需要这样做。我需要确保你包含它才能正常工作:
window.open('http://www.google.com');
手动添加协议
如果您因任何原因需要明确省略协议,可以考虑编写一个函数来处理为您打开窗口:
function openWindowAndPrependProtocol(url){
if(/^https?:\/\//i.test(url)){
// If it doesn't start with http:// or https://, then append it
return window.open('http://' + url);
}
}
会改变您要使用的代码:
var a = openWindowAndPrependProtocol('www.google.com');
注意强>
根据Mozilla的说法,他们generally don't recommend using links in this manner to open new windows via window.open()
if at all possible,因为它可以带来一些可用性问题。他们的best practices建议使用类似于第二种方法的外部函数来处理打开窗口。
答案 1 :(得分:2)
如果您想自动将协议添加到网页用户提供的网址,您可以使用以下功能执行此操作:
JavaScript (需要在页面上的某处添加):
<script type="text/javascript">
function openURL(url) {
var allowedProtocols = ["http://", "https://", "ftp://", "ftps://"];
var hasPrefix = false;
for(var i = 0; i < allowedProtocols.length; i++) {
if(url.substring(0, allowedProtocols[i].length) === allowedProtocols[i]) {
hasPrefix = true;
break;
}
}
if(!hasPrefix) {
url = "http://" + url;
}
window.open(url);
}
</script>
HTML:
<a onclick="openURL('www.google.com')">Google</a>
答案 2 :(得分:1)
试试这个:
<a onclick="window.open('https://www.google.com', 'Google', 'width=800,height=800')">
它在一个新标签中打开,800×800是窗口的尺寸。
答案 3 :(得分:1)
您需要添加http://
或https://
<a href="javascript: var a = window.open('http://google.com')">open new tab</a>`