我有一个Chrome扩展程序,允许用户输入网址。有时用户会错过“http://”。如果没有完整的网址,Chrome似乎会认为链接是扩展程序中的本地文件。
目前我的解决方案就是这个 -
var http_temp = $(this).attr("href");
if($.trim(http_temp).substr(0, 4)!="http"){
$(this).attr("href", "http://"+$(this).attr("href"));
}
有没有更好的方法来解决这个问题?我如何检测URL中最常见的错误。正则表达式还是别的什么会更好?
由于
答案 0 :(得分:0)
这听起来不错,虽然当然没有https,但我不知道如何解决这个问题。
也许,您还可以检查链接是否存在
function UrlExists(myUrl) {
var http = new XMLHttpRequest();
http.open('HEAD', myUrl, false);
http.send();
return http.status != 404;
}
答案 1 :(得分:0)
你可以尝试这个,它应该检测大多数协议(不仅仅是http):
if( !(/^\w{3,5}\:\/\//i.test(url)) ) {
url = 'http://'+url;
}
可能有更复杂的协议检测,但这适用于最常见的协议检测。
如果您假设所有用户都输入了http协议,那么另一个选择是:如何在输入之前打印出协议?这样,用户就知道将添加协议。这是一种常见的可用性实践:
http://<input type="text">
然后,如果用户输入协议,则很容易检测到并剥离:
url = 'http://'+url.replace(/.*:\/\//,'');