簡體   English   中英

html5 getCurrentPosition 在 safari、safari for ios 或 IE11 中不起作用

[英]html5 getCurrentPosition not working in safari, safari for ios, or IE11

編輯:此問題的症狀不一致。 今天我又試了一次,突然它起作用了……有時。 如果我一遍又一遍地刷新它大約有一半的時間。 如果它在 iframe 內運行,則 iframe 需要 allow-same-origin 和 allow-scripts。 我真的不能確定這其中的任何一個,因為它是如此不一致。 最終我決定使用基於 IP 的地理定位來避免頭痛。

如果有人可以復制這個問題,請在評論中告訴我。 TLDR:此鏈接將在 safari 和 ie11 中顯示錯誤,但不會在 chrome 中顯示。

有問題的代碼:

<!DOCTYPE html>
<html>
  <head>
    <script>  
        navigator.geolocation.getCurrentPosition(function(position){
                document.body.innerHTML = position.coords.latitude;
        }, function(error){
                document.body.innerHTML = error.message;
        });
    </script>
  </head>
  <body>
  </body>
</html>

問題:在 android 上的 chrome、edge beta(所以基本上是 chrome)和 chrome 上,此代碼將成功並將您的設備緯度打印到頁面上。 在 Safari、ios safari 和 IE11 上,這將失敗並顯示消息“此站點無權使用地理定位 API”。

我認為它不是指用戶授予訪問位置數據的權限,但我還是檢查了這一點。 似乎並非如此,因為它可以在一個瀏覽器中運行,而在同一設備上的另一個瀏覽器中卻沒有。 在我的示例中,它適用於 Chrome,但不適用於同一台 Windows 10 計算機上的 ie11。 我也讓一位同事確認了同樣的事情,它在 chrome 中有效,但在他的 Mac 上無法使用 safari。

這讓我認為這是一個域問題,但為什么它可以在一個瀏覽器中運行而不是另一個瀏覽器? 經過大量谷歌搜索后,我能找到的最佳答案是它是 SSL 問題,但是如果您訪問https://developers.google.com/maps/documentation/javascript/geolocation,您可以看到即使 google.com 也面臨着同樣的問題。 所以我認為這排除了這一點。 您甚至可以在 w3schools 自己的網站https://www.w3schools.com/html/html5_geolocation.asp上試用

谷歌這里當然沒有輸入,因為navigator是html5的產物

我無法在 IE 11 中重現該問題。我在 IE 11 中測試了 Google 和 w3schools 鏈接,他們請求獲取位置的權限,如果我允許,可以顯示位置。 我還嘗試了您提供的代碼片段,它在 IE 11 和 Chrome 中都輸出了位置。

您是否取消選中 IE 11 中的“從不允許網站請求您的物理位置”框? 此外,我還找到了一個類似的線程,您也可以參考其中的解決方案。

在您的帖子中,您似乎找到了解決方案。 我建議您也可以將您的解決方案作為答案,並將最佳答案作為可接受的答案。 它可以在未來幫助其他社區成員解決類似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM