Chrome 地理定位传感器破坏 CORS

Mat*_*man 7 javascript google-chrome geolocation

我有一个应用程序,它从地理定位 api 中提取纬度/经度,并对其余 api 进行一些反向地理编码。

我曾经能够在开发人员工具中使用 Chrome 传感器覆盖来测试各种位置。但是,最近生成的 AJAX 调用已停止工作,即使我知道其余 api 的 CORS 标头设置正确,我也收到了 CORS 错误。事实上,当我将位置设置为“无覆盖”时,呼叫正常工作。

在这里设置了一个小提琴来演示。它访问的 url 没有 CORS 设置(我找不到一个公共回显),但可以看到行为。

观看网络标签。When "No Override" is selected chrome tries to do a straight GET request. 选择“伦敦”时,Chrome发送选项请求,此请求失败是否为CORS或不配置REST API。显然,在小提琴中,所有这些都因 api 而失败,但即使是正确配置的端点也会失败,并出现通常的标头未设置错误。

这是一个错误还是我错过了什么?

$('button').on('click', function(e) {
  navigator.geolocation.getCurrentPosition(function(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    $.get('https://postman-echo.com/get?q=' + lat + ';' + lng, function(res) {
      console.log(res.body);
    });
  });
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>
  Click
</button>
Run Code Online (Sandbox Code Playgroud)

Rav*_*tty 9

在上面的 Sami 回复中添加更多内容:

浏览器传感器覆盖应用于纬度、经度、时区和区域设置。区域设置覆盖导致设置 Accept-Language 的浏览器请求标头。

Accept-Language: mr_IN
Run Code Online (Sandbox Code Playgroud)

因此,或者,假设您只对位置感兴趣,您可以通过不设置区域设置覆盖来避免错误。

  • 事实证明这是一个错误,但是是的,您是对的,将区域设置和时区留空是目前的解决方法。https://bugs.chromium.org/p/chromium/issues/detail?id=1097677#c_ts1593500548 (3认同)