我目前正在开发一个在 NetSuite 上运行的相当复杂的电子商务网站。NetSuite 的核心在很大程度上依赖于 Javascript,我自己也实现了相当多的自定义 Javascript。
最近,我使用 Maxmind 的 GeoIP 数据库实现了一些代码来确定用户的位置并根据该位置采取行动。这个想法是阻止某些国家/地区购买商品,将它们重定向到特定于国家/地区的页面,并通知他们在他们的国家/地区有经销商可用。(我知道这可能不是最好的做事方式,但出于各种原因,这些决定不取决于我)。
所以,这就是我正在做的事情。当页面加载时,它会运行 Maxmind 脚本来确定用户的位置并设置一个 cookie,这样我就不必一直提示他们的位置:
var geoCheck = (function () {
var location = getCookie("country");
var onSuccess = function (geoipResponse) {
country_code = geoipResponse.country.iso_code;
if (!geoipResponse.country.iso_code) {
country_code = "US";
}
setCookie("country",country_code,365);
return;
};
var onError = function (error) {
country_code = "US";
};
if (location != null && location != "") {
return function() {
country_code = location;
}
} else {
return function () {
geoip2.country( onSuccess, onError );
};
}
}());
然后,当用户单击“添加到购物车”按钮时,将运行此函数以确定用户是否正在从我们的受限制国家之一浏览:
function countryCheck() {
if (country_code) {
switch (country_code) {
case 'CN':
/*redirect stuff*/
return false;
case 'TW':
/*redirect stuff*/
return false;
/*...and so on for about 6 countries total...*/
}
return true;
} else {
return true;
}
return true;
}
问题:自从我实现了这个代码,客户一直在使用 Internet Explorer 处理来自政府用户的电话,说他们不能将商品添加到他们的购物车中。我以前一直在使用 GeoLite 数据库,以前从未遇到过这些问题。直到我实现了上面的代码。
我知道这是一个漫长而复杂的线程,但是这个线程让我很困惑,所以提供的任何帮助将不胜感激。基于之前的实现和其他因素,我几乎可以立即揭穿我能想出的所有不可行的方案:
- 政府计算机阻止 Javascript?
- 被揭穿的原因是:它应该与 GeoLite 解决方案一起工作,甚至在此之前,因为核心功能已经严重依赖 Javascript,并且没有提供很多(如果有的话)后备。
- 政府计算机阻止 cookie?
- 被揭穿的原因是:代码并不真正依赖 cookie 来工作。它只是为了方便而设置的,所以我不必一直提示用户他们的位置
- 政府计算机阻止 W3C 地理定位?(GeoIP新版新特性):
- 被揭穿的原因是:如果 W3C 位置失败,它应该回退到 Maxmind 数据库,这在我之前的(工作)解决方案中再次使用。
再说一次,我知道这是一个很长的话题,但是有人有什么好的想法可以尝试吗?提供的任何帮助将不胜感激。谢谢!