如何在客户端站点中检测浏览器国家?

Kev*_*nHu 6 html javascript browser navigator

我发现以下网站甚至可以在私人模式下检测我的国家和货币

http://www.innisfreeworld.com/

它记录在cookie中,它是如何做到的?

在此输入图像描述

这可能在客户端站点中实现吗?航海家?

Jas*_*lez 15

另一种选择是使用(国际化 API

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Run Code Online (Sandbox Code Playgroud)

  • 可能无法准确工作,因为一个时区可能位于多个国家/地区。例如,“欧洲/苏黎世”位于德国、瑞士和列支敦士登。 (4认同)
  • @Aamnah 实际上每个国家/地区都有单独的时区定义(例如“欧洲/柏林”和“欧洲/瓦杜兹”),用户_可能_设置正确。但绝对没有保证。 (3认同)

phi*_*hag 13

有多种选项可用于确定区域设置.按有用性的降序排列,它们是:

  1. 中查找IP地址,一个IP地理定位服务一样的MaxMind的GeoIP.这是请求来自的位置,即如果美国人在意大利度假并使用瑞典VPN,它将返回Sweden.

它只能在服务器的帮助下完成.主要优点是它非常可靠.准确性将是国家或地区的免费服务,城市或地区的付费.

  1. 使用地理位置API从浏览器中查找地球上的精确位置.使用瑞典VPN在意大利度假的美国人将注册为意大利.

答案非常精确,通常不超过10米.原则上,它可以在客户端工作,但您可能希望在服务器上执行坐标 - >国家/地区查找.主要缺点是并非所有设备都具有GPS或WiFi位置,并且通常需要明确的用户同意.

  1. 查看Accept-Language服务器上的标题(或在服务器的帮助下),并提取语言环境信息.使用瑞典VPN在意大利度假的美国人将注册为美国.

缺点是这是一个非常容易改变的设置.例如,世界各地的英语使用者可能更喜欢en-US设置以避免机器翻译的文本.在现代浏览器上(写作不是IE/Edge,只有Safari 11+),您也可以请求navigator.languages.

  1. navigator.languagenavigator.languages标题的第一个元素.navigator.languages的所有注意事项都适用.最重要的是,这些信息有时可能只是没有任何语言环境的语言(即en代替en-US).

  2. 使用其他第三方服务.例如,如果用户通过诸如Facebook连接的单点登录系统登录,则可以请求用户的家乡.此信息通常非常不可靠,需要第三方.

  • 同样,大多数geoip服务都需要您使用API​​密钥。在前端执行此操作会公开您的API密钥……有人可以使用它并滥用它。 (2认同)