当URL未完成时,在新标签中打开URL会生成404

时间:2016-06-03 15:03:43

标签: javascript url

我想在用户点击链接时打开新标签页。该链接是用户生成的,当用户输入www.google.com等网址时,该标签无法按预期工作。这是一个显示问题的jsFiddle,这是代码:

<a href="javascript: var a = window.open('www.google.com')">open new tab</a>

我该如何解决这个问题?告诉用户输入格式正确的URL不是一种选择。

4 个答案:

答案 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>`