【问题标题】:Check if user is using browser located in China or not检查用户是否使用位于中国的浏览器
【发布时间】:2014-12-26 01:55:42
【问题描述】:

中国从 2014 年开始屏蔽 Google API,这意味着包含 Map API 或 Fonts API 的网站的加载时间很长。有一个解决方法,因为 fonts.useso.com 也提供相同的字体库(分别参见libs.useso.comfonts.useso.com)。

以下代码

<link href='http://fonts.googleapis.com/css?family=Open+Sans:300,400,600&subset=latin,latin-ext' rel='stylesheet'>

可以改成

<link href='http://fonts.useso.com/css?family=Open+Sans:300,400,600&subset=latin,latin-ext' rel='stylesheet'>

它在中国会很好用。

但是,如果考虑到用户访问的位置,我想动态选择要从中加载 API 的源,该怎么办?

【问题讨论】:

    标签: html css fonts geolocation


    【解决方案1】:

    您可以使用第三方服务来确定用户位置并切换您的字体。

    例如,您可以免费集成userinfo.io。 在这种情况下,位置是根据IP地址确定的,所以如果中国人从欧洲访问,他将位于欧洲,并且会加载谷歌字体。

    将此插入您的&lt;head&gt;

    <script type="text/javascript" href="//cdnjs.cloudflare.com/ajax/libs/userinfo/1.0.0/userinfo.min.js"></script>
    
    <script type="text/javascript">
    UserInfo.getInfo(function(data) {
      // the "data" object contains the info
      if (data.country.code == 'CN') {
        // load your fallback fonts
      } else {
        // Load your google fonts
      }
    }, function(err) {
      // the "err" object contains useful information in case of an error
    });
    </script>
    

    免责声明:我编写并维护userinfo.io

    【讨论】:

    • 简单的 API!看起来不错:)
    • IP地址的隐私如何?
    • 这很有说服力——有什么收获?有交通限制吗?
    • 没有问题,但我没有在维护上投入太多精力 :) 目前,它可以正常工作,而且我们收到了相当多的请求。
    【解决方案2】:

    时区可以解决问题:

    var offset = new Date().getTimezoneOffset();
    if(offset/60 == -8){
        console.log('Hello from China!');
    }
    

    请注意,这会忽略时钟配置不正确的客户端,但可以覆盖大多数场景。

    【讨论】:

    • 同一时区还有其他国家。
    【解决方案3】:

    我偶然发现了另一个解决方案,我想分享一下。我认为这很酷,因为不需要包含库,而只需通过 ajax 请求获取信息。

    function replaceGoogleCDN() {
      $('link').each(function(){
        var $intial  = $(this).attr('href'),
            $replace = $intial.replace('//fonts.googleapis.com/', '//fonts.useso.com/');
            $(this).attr('href', $replace);
      });
    }
    
    $.getJSON('//api.wipmania.com/jsonp?callback=?', function (data) { 
      if ( data.address.country_code == 'CN' ) {
        replaceGoogleCDN();
      }
    });
    

    编辑:不过,如果您使用的是 https,这不是一个很棒的解决方案,因为您无法从 http 源加载,而且 wipmania 似乎没有有效的 ssl 证书。

    Source

    【讨论】:

      【解决方案4】:

      Google 字体现在托管在中国的服务器上,从而消除了缓慢的加载时间。 (截至 2016 年 8 月)查看我的回答 here 了解完整说明。

      【讨论】:

        猜你喜欢
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 2014-01-06
        • 1970-01-01
        • 2013-05-29
        相关资源
        最近更新 更多