2012-09-17 58 views
3

如果用戶的瀏覽器請求允許我們確定用戶的位置,我希望在頁面上顯示信息,但是如果瀏覽器已經通過身份驗證以向我們提供位置,我不想嘗試顯示此信息。是否有測試來確定頁面是否要求位置授權?

有沒有這樣做的好方法?

詳細說明。我想顯示一條消息,說「請點擊」允許這些人獲得您的位置「的框,」因爲在用戶測試中,我們發現用戶沒有看到對話並且變得困惑。

但是,即使我們在通過位置查找頁面時獲得他們的許可,也會導致我們閃爍幫助消息。存儲他們向我們提供許可的事實並不會有幫助,因爲他們可能會撤銷此許可,我們也不會知道。

任何想法?

乾杯 馬克。

+0

+1我也想知道。 – Mark

+0

您是否嘗試過執行'getCurrentPostion()'調用,然後檢查是否出現'PERMISSION_DENIED'錯誤? –

回答

1

您可以將錯誤回調移交給getCurrentPosition()以確定用戶是否拒絕跟蹤/位置無法確定(spec)。

此外,我會設置一個TimeOut,它會在一段時間後提示您的消息,因爲在這種情況下用戶很可能忽略了瀏覽器對話框。

示例代碼:

function getLocation(){ 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
    // set a Timeout, after which the user gets prompted 
    // ugly global var but you could prevent this e.g. with a closure 
    t = window.setTimeout(
       function(){alert("Please allow us to locate you;) !")},3000 
     ); 
    } else { 
    alert("Geolocation is not supported by this browser."); 
    } 
} 
function showPosition(position){ 
     alert("Latitude: " + position.coords.latitude + " - Longitude: " + position.coords.longitude); 
     // position could be determined, clear the timeout 
     window.clearTimeout(t); 
} 
function showError(error){ 
    // an error occured, clear the timeout as well 
    window.clearTimeout(t); 
    switch(error.code) { 
    case error.PERMISSION_DENIED: 
     alert("User denied the request."); 
     // Do stuff here, etc. ask the user to please allow the request 
     break; 
    case error.POSITION_UNAVAILABLE: 
     alert("No Location information available."); 
     break; 
    case error.TIMEOUT: 
     // user probably didn't recognize the browser dialog 
     alert("The request timed out."); 
     break; 
    case error.UNKNOWN_ERROR: 
     alert("An unknown error occurred."); 
     break; 
    } 
} 

但是,你仍然可以存儲權限,並檢查它。如果他們撤銷權限,您將進入錯誤回調,您可以在其中採取相應措施。

+0

非常感謝,這絕對是一個可行的解決方案。我希望能在沒有暫停的情況下做更直接的事情! – mark

+0

@mark正如我所提到的 - 沒有太多問題,您可以存儲用戶的決定,並在處理程序中按需更改。 – Christoph

+0

是真的,謝謝你的解決方案。 – mark

相關問題