控制依赖于地理 IP 的 HTML 元素

Posted

技术标签:

【中文标题】控制依赖于地理 IP 的 HTML 元素【英文标题】:Controlling HTML elements dependent on geo IP 【发布时间】:2012-09-04 10:11:22 【问题描述】:

我们有一个移动网页here,它将在不同国家/地区可用,在每个国家/地区内,我们需要能够根据访问者的 IP 更改以下内容:

div#container 拥有不同的背景图片 div#buttons 被隐藏,div#buttons-2 被显示

使用名为GeoIP 的javascript,到目前为止,我们能够识别访问者的国家并以两个字符的ISO 3166-1 形式获取函数名称,以用于控制其他JavaScript 函数。例如,我来自英国,所以当我访问该页面时,JavaScript 会生成以下代码:

function geoip_country_code()  return 'GB'; 

html 中目前有一个脚本说:

    if (geoip_country_code() == 'GB') 
    
      alert("Hello, you are in Great Britain");
    

我们想开发它,以便我们可以操纵指定元素的 CSS,但我们并不精通 JavaScript,所以这是我们需要帮助的地方。

这是嵌入页面的 JavaScript:

<script src="http://j.maxmind.com/app/country.js" charset="ISO-8859-1"></script>

以下是我们要控制的 HTML 元素:

<div id="container">
            <div id="buttons">
                <a href="#" target="blank">
                    <div class="button youtube"></div>
                </a>
                <a href="#" target="blank">
                    <div class="button facebook"></div>
                </a>
                <a href="#" target="blank">
                    <div class="button web"></div>
                </a>
                <a href="#" target="blank">
                    <div class="button appstore"></div>
                </a>
            </div>
        </div>

【问题讨论】:

我完全不精通 JavaScript,所以我现在正在摸索一些尝试。我所尝试的只是测试 JS 是否通过以下方式工作: if (geoip_country_code() == 'GB') alert("Hello, you are in Great Britain"); 【参考方案1】:
var map = 
    'GB': 
        'background': 'img1.jpg',
        'buttons': 'show',
        'buttons2': 'hide'
    
;

var country = geoip_country_code();
$('#container').css('background', map[country].background);
$('#buttons')[map[country].buttons]();
$('#buttons2')[map[country].buttons2]();

这是一个使用 jQuery 的示例。我希望您了解使用“映射对象”的想法(那里只有英国,但可以根据需要添加国家/地区),然后您可以在此基础上执行您的操作。

【讨论】:

太好了,非常感谢。对理解地图的这个概念很有帮助。我可以用这种方式更改 元素的 href 吗? 我曾尝试使用此代码:'href': 'http://www.youtube.com/watch?v=12345678'$("a.youtube").attr('href', map[country].href);,但当它读取 YouTube 链接时我得到 uncaught syntaxerror unexpected string。有什么想法吗? 嗯,不抱歉,我没有看到问题:/你能做一个 jsfiddle 吗? 问题已解决,感谢您的帮助。非常感谢!【参考方案2】:

根据返回的国家代码,你应该改变样式表(css)

如果返回 GB 然后加载 css where div#container 有不同的背景图片 div#buttons 被隐藏并 div#buttons-2 被显示

反之亦然。

或者你可以简单地用 javascript 做到这一点

创建一个函数: 设置容器的背景图片, 隐藏 div#button, 显示 div#buttons-2

还有另一个反之亦然的功能,例如: 设置容器的另一个背景图像, 显示 div#button, 隐藏 div#buttons-2

现在您可以调用相应的函数来显示如下: 如果返回 'US' 调用 func1, 如果返回 'UK' 调用 func2

【讨论】:

以上是关于控制依赖于地理 IP 的 HTML 元素的主要内容,如果未能解决你的问题,请参考以下文章

控制反转依赖注入的实质

基于 ip 的地理定位精度的时间依赖性

整个网站的通用音量控制?

如何从 omegle 上的 ip 返回地理数据?

伪元素控制表单样式

伪元素控制表单样式