我目前正在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数据库上回退,这在我以前的(工作)解决方案中再次使用
同样,我知道这是一条很长的线索,但有人有什么好的想法可以尝试吗?如能提供任何帮助,我们将不胜感激。谢谢
我留下了一个错误:
console.log();
导致IE崩溃。使用这个线程,我添加了:
if (!window.console) console = {log: function() {}};