0

我目前正在开发一个在 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 数据库,以前从未遇到过这些问题。直到我实现了上面的代码。

我知道这是一个漫长而复杂的线程,但是这个线程让我很困惑,所以提供的任何帮助将不胜感激。基于之前的实现和其他因素,我几乎可以立即揭穿我能想出的所有不可行的方案:

  1. 政府计算机阻止 Javascript?
    • 被揭穿的原因是:它应该与 GeoLite 解决方案一起工作,甚至在此之前,因为核心功能已经严重依赖 Javascript,并且没有提供很多(如果有的话)后备。
  2. 政府计算机阻止 cookie?
    • 被揭穿的原因是:代码并不真正依赖 cookie 来工作。它只是为了方便而设置的,所以我不必一直提示用户他们的位置
  3. 政府计算机阻止 W3C 地理定位?(GeoIP新版新特性):
    • 被揭穿的原因是:如果 W3C 位置失败,它应该回退到 Maxmind 数据库,这在我之前的(工作)解决方案中再次使用。

再说一次,我知道这是一个很长的话题,但是有人有什么好的想法可以尝试吗?提供的任何帮助将不胜感激。谢谢!

4

1 回答 1

0

我留下了一个错误:

console.log();

这会导致 IE 崩溃。使用这个线程,我添加了:

if (!window.console) console = {log: function() {}};
于 2013-07-12T16:31:07.983 回答