这阵子接到个任务:如果用户没有连接vpn,那么他无法正常访问需要连接vpn的网站。需求是在访问该网站之前判断用户是否连接了vpn,如果没有,就给一个友好的提示。

如何判断用户是否连接了vpn?我最初的想法是:先获取用户的ip,然后判断ip和该网站的ip是否在同一个网络下,但是由于鄙人对计算机网络的认知仅停留在会背七层协议的阶段上,加之万能的百度谷歌都没有搜到满意的解决思路。所以必须另辟蹊径。

我们是否能够请求该网站,然后判断请求的状态码,以判断用户是否连接vpn?于是,在访问该网站之前,我异步请求了该网站,然后设置超时,最后在请求完成事件中做逻辑判断,成功的解决了该任务,走向了人生的巅峰。

var url = 'http://www.baidu.com'
$.ajax({
  url: url,
  timeout: 3000,
  dataType: 'jsonp',
  async: true,
  complete: function (xhr) {
	if (xhr.readyState === 4 && xhr.status === 200) {
	    window.open(url)	  
	} else {
		alert('网络请求失败,请检查您的网络或使用vpn连接!')
  1. ajax的complete回调还有一个参数status,可以获取请求的最终状态。我做项目的时候发现个问题,一个网址在我本机打开状态是timeout,在另一台机器打开状态时error,然后我的代码逻辑是判断状态是否是timeout,没有考虑到error的情况,所以最好通过状态码去判断是否请求成功。
  2. 一个问题有多种解法,当你一个方向走不通时,可以考虑从另外的角度看问题。
  3. 写这篇文章的目的是:每个月都要写至少一篇csdn博客,算是为了完成目标吧!?
需求这阵子接到个任务:如果用户没有连接vpn,那么他无法正常访问需要连接vpn的网站。需求是在访问该网站之前判断用户是否连接了vpn,如果没有,就给一个友好的提示。思考如何判断用户是否连接了vpn?我最初的想法是:先获取用户的ip,然后判断ip和该网站的ip是否在同一个网络下,但是由于鄙人对计算机网络的认知仅停留在会背七层协议的阶段上,加之万能的百度谷歌都没有搜到满意的解决思路。所以必须另辟...
最近开发中碰到一个问题,有一场景需要在ajax验证通过后在新窗口打开一个url。 一开始通过在异步回调函数中使用window.open()来实现,但是发现这种实现方式会被浏览器拦截,需要用户进行浏览器设置才能打开,但是这显然不 适合在互联网应用中对用户做这个限制。因此就想有没有什么办法来解决? 办法一:失败 首先的一个想法是js打开一个新窗口不行,有可能是浏览器对于js直接打开...