我有一个Chrome扩展,允许用户输入URL。有时用户遗漏了"http://"。如果没有完整的URL,Chrome似乎会假设链接是扩展名中的本地文件。
目前我的解决方案是:
var http_temp = $(this).attr("href");
if($.trim(http_temp).substr(0, 4)!="http"){
$(this).attr("href", "http://"+$(this).attr("href"));
}
有没有更好的方法来解决这个问题?我该如何检测URL中最常见的错误? regex或其他什么更好?
谢谢
发布于 2012-03-01 19:43:19
这听起来很不错,当然,没有https,但我也不确定如何解决这个问题。
也许,您还可以使用以下命令检查链接是否存在
function UrlExists(myUrl) {
var http = new XMLHttpRequest();
http.open('HEAD', myUrl, false);
http.send();
return http.status != 404;
}
发布于 2012-03-01 20:02:53
你可以试试这个,它应该能检测到大多数协议(不仅仅是http):
if( !(/^\w{3,5}\:\/\//i.test(url)) ) {
url = 'http://'+url;
}
可能有更复杂的协议检测,但这适用于最常见的协议检测。
如果假设所有用户都输入了http协议,那么另一个选择是:在输入之前打印出协议如何?这样,用户就知道协议将被添加。这是一种常见的可用性实践:
http://<input type="text">
然后,如果用户进入一个协议,它很容易被检测和剥离:
url = 'http://'+url.replace(/.*:\/\//,'');
https://stackoverflow.com/questions/9522768
复制相似问题