簡體   English   中英

地理位置無法與Apple Mobile Web App能力一起使用?

[英]Geolocation not working with apple-mobile-web-app-capable?

我有以下JS在#zip顯示當前用戶的郵政編碼:

(function ($, geolocation) {
    if (geolocation) {
        geolocation.getCurrentPosition(function (position) {
            $.getJSON(
                "http://ws.geonames.org/findNearestAddressJSON?callback=?",
                {
                    lat : position.coords.latitude,
                    lng : position.coords.longitude
                },
                function (data) {
                    $(function () {
                        $('#zip').text(data.address.postalcode);
                    });
                }
            );
        });
    }
}(jQuery, navigator.geolocation));

我也有一個JS函數來重新加載頁面:

$('.reload').click(function(){
    window.location.reload(true);
});

在Mobile Safari中,這兩個功能可以很好地協同工作。 如果用戶打開網頁,它將加載用戶當前的郵政編碼。 然后,如果用戶更改位置,則用戶可以通過點擊底部按鈕來重新加載頁面。 除存在<meta name="apple-mobile-web-app-capable" content="yes">情況外,此方法工作正常。

如果存在,會發生以下情況:

  1. 用戶點擊主屏幕上的圖標
  2. 隨即打開網頁並隱藏地址欄,因為<meta name="apple-mobile-web-app-capable" content="yes">執行此操作
  3. 郵編加載應有的方式
  4. 用戶移動位置,點擊重新加載按鈕
  5. 頁面無法顯示郵政編碼,沒有錯誤記錄到控制台

我真的很想解決這個問題,但是如果這對您有幫助的話,下面是一個有效的示例:

http://www.codekraken.com/testing/zipper/zip.html

全屏Web應用程序不重新加載(使用支持apple-mobile-web-app的應用程序)。 但是,當用戶更改位置,然后再次運行應用程序時,它將始終加載頁面。 它不會觸發reload事件,但是會在每次運行時觸發onload事件。

如果用戶讓應用程序運行並更改位置,則需要一個簡單的“再次查找我”功能,該功能只需重新運行代碼即可查找當前位置和郵政編碼。

現在-這里很重要! 我發現在iOS上,即使您告訴它僅使用新位置,該位置也經常被緩存,因此有時您會得到舊位置。 我為此創建了一個變通方法,稱為getAccurateCurrentLocation(),它使用非常相似的接口。 您可以在https://github.com/gwilson/getAccurateCurrentPosition上找到代碼-替換getCurrentPosition()十分簡單。

那應該做。

萬一其他人有困惑(如我所知),此處涉及的方法是地理位置對象的本機“ watchPosition”方法。

WatchPosition MDN規格

當用戶移動位置時,將調用watchPosition方法,您可以將zip生成器的經緯度指定為回調。

從規格:

    var watchID = navigator.geolocation.watchPosition(function(position) {
        do_something(position.coords.latitude, position.coords.longitude);
    });

所以看起來你可以做:

    var watchID = navigator.geolocation.watchPosition(function(position) {
        $.getJSON(
            "http://ws.geonames.org/findNearestAddressJSON?callback=?",
            {
                lat : position.coords.latitude,
                lng : position.coords.longitude
            },
            function (data) {
                $(function () {
                    $('#zip').text(data.address.postalcode);
                });
            }
        );
    });

這將實現更簡單的操作-用戶不必點擊位置按鈕,它應該在移動時已經更新。

需要明確的是,Greg的函數使用此watchPosition方法,但是如果您想了解正在使用的功能,或者使用精簡得多的本機代碼並自己進行自定義,watchPosition是您的工具。

全屏模式在WebSheet中啟動瀏覽器,該WebSheet可能具有一組單獨的地理位置權限。 也許以前您拒絕在WebSheet中共享地理位置信息,但在Safari瀏覽器中允許它。

如果我沒記錯的話,眾所周知WebSheets會不時地重置其權限,並再次提示用戶以允許每隔幾個小時讀取地理位置。

暫無
暫無

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

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