今天遇到一個奇怪的問題膨报,同樣域名糙置,同樣的JS撩匕,index.html是可以彈出定位提示框蜓堕,但是product.html卻不行:
https://aa.haha.com/index.html
https://aa.haha.com/aaa/product.html
google之后發(fā)現(xiàn)前輩文章(http://www.skyfox.org/html5-geolocation-safari-user-permission-prompt.html)
幾次嘗試后得出結(jié)果蜂嗽,這個是通過url去做得緩存苗膝,所以需要進行還原下。
解決方案就是植旧,需要在系統(tǒng)中就行清理緩存的設(shè)置:
(設(shè)置)Settings -> (通用)Genera -> (重置) Reset-> (重置定位于隱私)Reset Location & Privacy.
(設(shè)置)Settings ->( 隱私)Privacy 開啟 Location Services.
重新進入頁面即可提示用戶權(quán)限提示了辱揭!
在Safari或者在使用UIWebview的APP中當(dāng)點擊“不允許”選項之后webapp/html5 的定位服務(wù)不能再次顯示用戶權(quán)限提示框。
可以用這個源碼做測試
<!DOCTYPE html>
<html>
<body>
<p id="demo">點擊這個按鈕病附,獲得您的坐標(biāo):</p>
<button onclick="getLocation()">試一下</button>
<script>
var x=document.getElementById("demo");
function getLocation()
{
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else{x.innerHTML="Geolocation is not supported by this browser.";}
}
function showPosition(position)
{
x.innerHTML="Latitude: " + position.coords.latitude +
"<br />Longitude: " + position.coords.longitude;
}
function showError(error)
{
switch(error.code)
{
case error.PERMISSION_DENIED:
x.innerHTML="User denied the request for Geolocation."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML="Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML="The request to get user location timed out."
break;
case error.UNKNOWN_ERROR:
x.innerHTML="An unknown error occurred."
break;
}
}
</script>
</body>
</html>
不管是原生iOS APP嵌入單個h5頁面问窃,還是都是h5頁面的webapp也好,只要涉及到定位都會遇到這個情況完沪。
當(dāng)請求iOS開始定位的時候域庇,會彈出一個提示框,提示你是否"允許"定位覆积,允許定位繼續(xù)下一步听皿,如果一不小心點了下"不允許"之后,會發(fā)現(xiàn)宽档,下次進到這個h5之后再也不會提示請求定位權(quán)限的提示框了写穴。"不允許"被緩存了下來。再次調(diào)用geolocation會報 error.PERMISSION_DENIED 錯誤
而且沒有相應(yīng)的api能重啟提示框雌贱。
如果說h5頁面用于app中顯示啊送,可以嘗試使用js與app原生交互來獲取定位,原生獲取定位后反傳給h5欣孤,這樣當(dāng)整個app的定位權(quán)限被用戶拒絕與開啟的時候馋没,直接到設(shè)置中對應(yīng)的app下就可以恢復(fù)了。